pip install scrapy-redis
修改設(shè)置文件
(1)設(shè)置去重組件,使用的是scrapy-redis的去重組件,而不再使用scrapy框架自己的去重組建了
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
(2)設(shè)置調(diào)度器,使用的是crapy-redis重寫的調(diào)度器,而不再使用scrapy框架自帶的調(diào)度器了
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
(3)可以實(shí)現(xiàn)斷點(diǎn)爬鹊稹(請(qǐng)求的記錄不會(huì)丟失,會(huì)存儲(chǔ)在Redis數(shù)據(jù)庫中,不會(huì)清楚Redis的任務(wù)隊(duì)列)
SCHEDULER_PERSIST = True
(4)設(shè)置任務(wù)隊(duì)列的模式(三選一)
#SpiderPriorityQueue是scrapy_redis默認(rèn)使用的隊(duì)列模式
(有自己的優(yōu)先級(jí))
SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
使用了隊(duì)列的形式,任務(wù)先進(jìn)先出
SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"
采用了棧的形式,任務(wù)先進(jìn)后出
#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"
(5)實(shí)現(xiàn)這個(gè)管道玫恳,可以將爬蟲端獲取的item數(shù)據(jù),統(tǒng)一保存在Redis數(shù)據(jù)庫中
'scrapy_redis.pipelines.RedisPipeline': 400,
(6)指定要存儲(chǔ)的redis數(shù)據(jù)庫的主機(jī)ip
REDIS_HOST = '127.0.0.1'
指定redis數(shù)據(jù)庫主機(jī)的端口
REDIS_PORT = 6379
"xcfCrawlSpider:requests":存儲(chǔ)的是請(qǐng)求的request對(duì)象
"xcfCrawlSpider:items":存儲(chǔ)的爬蟲端獲取的items數(shù)據(jù)
"xcfCrawlSpider:dupefilter":存儲(chǔ)的指紋(為了實(shí)現(xiàn)去重)
127.0.0.1:6379> type xcfCrawlSpider:requests
zset
127.0.0.1:6379> type xcfCrawlSpider:items
list
127.0.0.1:6379> type xcfCrawlSpider:dupefilter
set
第一中情況:只設(shè)置settings.py文件,并沒有實(shí)現(xiàn)分布式,知識(shí)使用了sctapy_redis的數(shù)據(jù)存儲(chǔ)和去重功能
第二中情況:實(shí)現(xiàn)通用爬蟲的分布式爬蟲
from scrapy_redis.spiders import RedisCrawlSpider
#繼承制:RedisCrawlSpider
class MyCrawler(RedisCrawlSpider):
"""Spider that reads urls from redis queue (myspider:start_urls)."""
name = 'mycrawler_redis'
allowed_domains = ['dmoz.org']
#缺少了start_url,多了redis_key:根據(jù)redis_key從redis
#數(shù)據(jù)庫中獲取任務(wù)
redis_key = 'mycrawler:start_urls'
啟動(dòng)爬蟲:scrapy crawl 爬蟲名稱
現(xiàn)象:爬蟲處于等待狀態(tài)
需要設(shè)置起始任務(wù):
lpush mycrawler:start_urls 目標(biāo)url
第三中情況:實(shí)現(xiàn)scrpy.spider爬蟲的分布式爬蟲
from scrapy_redis.spiders import RedisSpider
#繼承制:RedisSpider
class MyCrawler(RedisSpider):
"""Spider that reads urls from redis queue (myspider:start_urls)."""
name = 'mycrawler_redis'
allowed_domains = ['dmoz.org']
#缺少了start_url,多了redis_key:根據(jù)redis_key從redis
#數(shù)據(jù)庫中獲取任務(wù)
redis_key = 'mycrawler:start_urls'
啟動(dòng)爬蟲:scrapy crawl 爬蟲名稱
現(xiàn)象:爬蟲處于等待狀態(tài)
需要設(shè)置起始任務(wù):
lpush mycrawler:start_urls 目標(biāo)url