scrapy-redis
默認只支持redis中list
和set
數據結構, 可是當面對的業務多了後須要考慮到爬蟲任務優先級的問題. 好比目前有3個業務線同時須要用一個爬蟲, 3個業務線的重要程度不同, 那麼有如下幾種方案:python
scrapy-redis
的start_urls
支持優先級當時也是面臨這個問題, 採用的是加入了一層調度器來運行, 後來抽時間給scrapy-redis
提供了支持start_urls
優先級的feature, 經過在settings.py
中設置參數就能夠支持了, 測試也已經經過, 可能項目做者太忙了, 沒有給這個PR反饋.git
https://github.com/qshine/scrapy-redis
github
git clone https://github.com/qshine/scrapy-redis.git cd scrapy-redis python setup.py install
在settings.py
中設置該參數, 其它參數能夠參考READMEredis
# settings.py ...... REDIS_URL = 'redis://:@127.0.0.1:6379' REDIS_START_URLS_KEY = '%(name)s:start_urls' REDIS_START_URLS_AS_SET = False ......
測試spider
以下數據結構
# -*- coding: utf-8 -*- from scrapy_redis.spiders import RedisSpider class MysiteSpider(RedisSpider): name = 'mysite' def parse(self, response): print(response.url)
向redis
中添加3個優先級不一樣的任務scrapy
zadd mysite:start_urls 0 'a' 10 'b' 5 'c'
啓動spider
, 日誌以下ide
http://www.sina.com 2019-07-03 23:54:34 [mysite] DEBUG: Request not made from data: b'http://www.sina.com' http://www.163.com 2019-07-03 23:54:34 [mysite] DEBUG: Request not made from data: b'http://www.163.com' http://www.baidu.com 2019-07-03 23:54:34 [mysite] DEBUG: Request not made from data: b'http://www.baidu.com'
這個feature
是最近解決優先級提交的, 我的認爲是一個比較實用的功能. 若是有不足歡迎你們交流, 若是能幫你快速實現需求, 也歡迎點擊star
.測試