• 如何发现新的数据
      • 全量的爬虫仍然在继续
        • 重新启动一个爬虫:一个负责全量抓取、另一个服务增量抓取
        • 采用优先级队列(不需要使用2个爬虫),增量数据优先级高
      • 爬虫已经结束
        • 爬虫已经关闭
          • 如何发现已经有新的url待抓取,一旦有了url就需要脚本去启动爬虫
        • 爬虫等待

    scrapy-redis 解决上面的问题 (修改代码)

    • 如何解决已经抓取过的数据
      • 列表数据已经抓取过之后仍需要继续抓取
      • 已经抓取过的新闻是否需要继续抓取

    修改scrapy-redis源码,让列表页能够被重新抓取并不被去重,优先级更高

    sheduler.py
    enqueue_request中加入自己的逻辑,从redis中获取url并放入到队列中

    1. def enqueue_request(self,request):
    2. import redis
    3. import json
    4. import scrapy
    5. rd = redis.Redis("127.0.0.1",decode_responses=True)
    6. # 先检查指定的redis队列是否有url
    7. list_name = "cnblogs:new_urls"
    8. while rd.llen(list_name):
    9. data = json.loads(rd.lpop(list_name))
    10. callback_func = getattr(self.spider, data[2])
    11. req = scrapy.Request(url=data[0], dont_filter=False, callback=callback_func,priority=data[1])
    12. self.queue.push(request)