scrapy_redis 要实现分布式爬虫,需要分析项目中的spiders文件夹中的爬虫文件
#----1 导入分布式爬虫类
from scrapy_redis.spiders import RedisSpider
#----2 继承分布式爬虫类
class BookSpider(RedisSpider):
#----3 注销start_urls,增加了一个redis-key,没有start_urls,因为分布式中,如果每台电脑都请求一次start_url就会重复
redis_key = 'start_url在redis中对应的键'
#----4 多了__init__方法,该方法不是必须的,可以手动指定allow_domains
#----4.1 注销allowed_domains
# # 修改允许的域xxx
# allowed_domains = ['xxx.com']
# # 修改起始的url
# start_urls = ['https://xxx.com']
#----4.2 配置__init__方法
def __init__(self, *args, **kwargs):
# Dynamically define the allowed domains list.
domain = kwargs.pop('domain', '')
self.allowed_domains = list(filter(None, domain.split(',')))
super(定义的爬虫类名, self).__init__(*args, **kwargs)
#----5 启动方法
#----5.1 在每个节点正确的目录下执行爬虫文件,使该节点的scrapy_redis爬虫程序就位
scrapy crawl 爬虫名
#----5.2 在redis中给redis_key添加起始url,使全部节点真正的开始运行
lpush redis_key 'start_url'
#----0 在settings.p中添加断点续爬的配置,实现真正的分布式爬虫
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
SCHEDULER_PERSIST = True
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 400,
}
REDIS_URL = "redis://127.0.0.1:6379"