- 如何发现新的数据
- 全量的爬虫仍然在继续
- 重新启动一个爬虫:一个负责全量抓取、另一个服务增量抓取
- 采用优先级队列(不需要使用2个爬虫),增量数据优先级高
- 爬虫已经结束
- 爬虫已经关闭
- 如何发现已经有新的url待抓取,一旦有了url就需要脚本去启动爬虫
- 爬虫等待
- 爬虫已经关闭
- 全量的爬虫仍然在继续
scrapy-redis 解决上面的问题 (修改代码)
- 如何解决已经抓取过的数据
- 列表数据已经抓取过之后仍需要继续抓取
- 已经抓取过的新闻是否需要继续抓取
修改scrapy-redis源码,让列表页能够被重新抓取并不被去重,优先级更高
sheduler.py
enqueue_request中加入自己的逻辑,从redis中获取url并放入到队列中
def enqueue_request(self,request):
import redis
import json
import scrapy
rd = redis.Redis("127.0.0.1",decode_responses=True)
# 先检查指定的redis队列是否有url
list_name = "cnblogs:new_urls"
while rd.llen(list_name):
data = json.loads(rd.lpop(list_name))
callback_func = getattr(self.spider, data[2])
req = scrapy.Request(url=data[0], dont_filter=False, callback=callback_func,priority=data[1])
self.queue.push(request)