生活随笔
收集整理的這篇文章主要介紹了
分布式爬取
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
編輯本隨筆
概念:在多臺機器上執行同一個爬蟲程序,實現網站數據的分布式爬取
原生scrapy不可以實現分布式爬蟲,原因如下:
調度器無法在多臺電腦上共享管道無法共享分布式爬蟲組件:scrapy-redis,該組件可以讓scrapy實現分布式。
pip install scrapy-redis分布式爬取流程:
redis數據庫安裝redis文件配置 - 將bind 127.0.0.1注銷掉
- 將保護模式改為no,關閉保護模式,即protected-mode no
基于配置文件啟動redis服務器代碼流程:
創建scrapy工程,創建基于crawlSpider的項目從scrapy_redis.spiders中導入RedisCrawlSpider,并將項目的父類由CrawlSpider改為RedisCrawlSpider指定redis_key,指定start_urls在redis數據庫中存放的位置 # -*- 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文件,將項目的管道和調度器配置成基于scrapy-redis組件對應提供的功能 #使用組件封裝的管道,不使用原生的管道
ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline': 300,
}
# 使用scrapy-redis組件的去重隊列進行去重操作
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"# 使用scrapy-redis組件自己的調度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"# 是否允許暫停,即程序意外宕機重啟后從上次意外退出的地方重新爬取
SCHEDULER_PERSIST = True#Redis服務器地址,代碼拷貝到其他服務器后,爬取的數據將保存到如下地址的redis服務器中
REDIS_HOST="192.168.1.1"#Redis服務器端口
REDIS_PORT=6379 執行爬蟲文件,進入爬蟲目錄scrapy runspider qiubai.py,啟動后爬蟲就開始監聽redis的qiubaispider鍵對應的內容 將起始url放入redis中:127.0.0.1:6379> lpush qiubaispider https://www.qiushibaike.com/pic/開始爬取內容基于RedisSpider實現分布式爬蟲
UA池:user-agent池
代理池:對代理IP進行批量更換
selenium如何應用到scrapy框架
轉載于:https://www.cnblogs.com/yaya625202/p/10432038.html
總結
以上是生活随笔為你收集整理的分布式爬取的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。