數據採集: 讓scrapy-redis的start_urls支持優先級

scrapy-redis默認只支持redis中listset數據結構, 可是當面對的業務多了後須要考慮到爬蟲任務優先級的問題. 好比目前有3個業務線同時須要用一個爬蟲, 3個業務線的重要程度不同, 那麼有如下幾種方案:python

  • 開3個spider(不建議)
  • 加入調度器進行優先級調度(加入了複雜度)
  • scrapy-redisstart_urls支持優先級

當時也是面臨這個問題, 採用的是加入了一層調度器來運行, 後來抽時間給scrapy-redis提供了支持start_urls優先級的feature, 經過在settings.py中設置參數就能夠支持了, 測試也已經經過, 可能項目做者太忙了, 沒有給這個PR反饋.git

項目地址

https://github.com/qshine/scrapy-redisgithub

使用方法

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.測試

相關文章
相關標籤/搜索