日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分布式爬取

發(fā)布時間:2024/1/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式爬取 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

編輯本隨筆

概念:在多臺機(jī)器上執(zhí)行同一個爬蟲程序,實(shí)現(xiàn)網(wǎng)站數(shù)據(jù)的分布式爬取

原生scrapy不可以實(shí)現(xiàn)分布式爬蟲,原因如下:

  • 調(diào)度器無法在多臺電腦上共享
  • 管道無法共享
  • 分布式爬蟲組件:scrapy-redis,該組件可以讓scrapy實(shí)現(xiàn)分布式。

  • pip install scrapy-redis
  • 分布式爬取流程:

  • redis數(shù)據(jù)庫安裝
  • redis文件配置
    • 將bind 127.0.0.1注銷掉
    • 將保護(hù)模式改為no,關(guān)閉保護(hù)模式,即protected-mode no
  • 基于配置文件啟動redis服務(wù)器
  • 代碼流程:

  • 創(chuàng)建scrapy工程,創(chuàng)建基于crawlSpider的項(xiàng)目
  • 從scrapy_redis.spiders中導(dǎo)入RedisCrawlSpider,并將項(xiàng)目的父類由CrawlSpider改為RedisCrawlSpider
  • 指定redis_key,指定start_urls在redis數(shù)據(jù)庫中存放的位置 # -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from scrapy_redis.spiders import RedisCrawlSpiderclass QiubaiSpider(RedisCrawlSpider):name = 'qiubai'allowed_domains = ['https://www.qiushibaike.com/imgrank/']# start_urls = ['http://https://www.qiushibaike.com/imgrank//']#表示start_urls在redis中存放的位置,作用類似start_urlsredis_key="qiubaispider"rules = (Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),)def parse_item(self, response):item = {}#item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()#item['name'] = response.xpath('//div[@id="name"]').get()#item['description'] = response.xpath('//div[@id="description"]').get()return item View Code
  • 配置setting文件,將項(xiàng)目的管道和調(diào)度器配置成基于scrapy-redis組件對應(yīng)提供的功能 #使用組件封裝的管道,不使用原生的管道 ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline': 300, } # 使用scrapy-redis組件的去重隊列進(jìn)行去重操作 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"# 使用scrapy-redis組件自己的調(diào)度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler"# 是否允許暫停,即程序意外宕機(jī)重啟后從上次意外退出的地方重新爬取 SCHEDULER_PERSIST = True#Redis服務(wù)器地址,代碼拷貝到其他服務(wù)器后,爬取的數(shù)據(jù)將保存到如下地址的redis服務(wù)器中 REDIS_HOST="192.168.1.1"#Redis服務(wù)器端口 REDIS_PORT=6379
  • 執(zhí)行爬蟲文件,進(jìn)入爬蟲目錄scrapy runspider qiubai.py,啟動后爬蟲就開始監(jiān)聽redis的qiubaispider鍵對應(yīng)的內(nèi)容

  • 將起始url放入redis中:127.0.0.1:6379> lpush qiubaispider https://www.qiushibaike.com/pic/
  • 開始爬取內(nèi)容
  • 基于RedisSpider實(shí)現(xiàn)分布式爬蟲

    UA池:user-agent池

    代理池:對代理IP進(jìn)行批量更換

    selenium如何應(yīng)用到scrapy框架

    轉(zhuǎn)載于:https://www.cnblogs.com/yaya625202/p/10432038.html

    總結(jié)

    以上是生活随笔為你收集整理的分布式爬取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。