###1.1 代码参考:AqiCrawlSpider
1.# (必须). 使用了scrapy_redis的去重组件,在redis数据库里做去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
2 使用了scrapy_redis的调度器,在redis里分配请求
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
3 在redis中保持scrapy-redis用到的各个队列,从而允许暂停和暂停后恢复,也就是不清理redis queues
SCHEDULER_PERSIST = True
4. 通过配置RedisPipeline将item写入key为 spider.name : items 的redis的list中,供后面的分布式处理item
ITEM_PIPELINES = {
# 'AQI.pipelines.AqiJsonPipeline': 200,
'scrapy_redis.pipelines.RedisPipeline': 100
}
5.指定redis数据库的连接参数
REDIS_HOST = '127.0.0.1'#此处填master主机redis地址
REDIS_PORT = 6379
在spiders目录下增加aqi.py文件编写我们的爬虫,使其具有分布式:
# 1. 导入RedisSpider类,不使用Spider
from scrapy_redis.spiders import RedisSpider
#2.导入RedisSpider类,不使用Spider
class AqiSpider(RedisSpider):
name = 'aqi'
allowed_domains = ['aqistudy.cn']
baseURL = "https://www.aqistudy.cn/historydata/"
# 3. 取消start_urls,增加redis-key,接受从Redis数据库里的指令
#start_urls = [baseURL]
redis_key = 'aqi:start_urls'
sudo redis-server /etc/redis/redis.conf
scrapy runspider aqi.py
redis-cli> lpush aqi:start_urls https://www.aqistudy.cn/historydata/