- 如何发现新的数据
- 全量的爬虫仍然在继续
- 重新启动一个爬虫:一个负责全量抓取、另一个服务增量抓取
- 采用优先级队列(不需要使用2个爬虫),增量数据优先级高
- 爬虫已经结束
- 爬虫已经关闭
- 如何发现已经有新的url待抓取,一旦有了url就需要脚本去启动爬虫
- 爬虫等待
- 爬虫已经关闭
- 全量的爬虫仍然在继续
scrapy-redis 解决上面的问题 (修改代码)
- 如何解决已经抓取过的数据
- 列表数据已经抓取过之后仍需要继续抓取
- 已经抓取过的新闻是否需要继续抓取
修改scrapy-redis源码,让列表页能够被重新抓取并不被去重,优先级更高
sheduler.py
enqueue_request中加入自己的逻辑,从redis中获取url并放入到队列中
def enqueue_request(self,request):import redisimport jsonimport scrapyrd = redis.Redis("127.0.0.1",decode_responses=True)# 先检查指定的redis队列是否有urllist_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)
