数据采集: 让scrapy-redis的start_urls支持优先级
scrapy-redis默认只支持redis中list和set数据结构, 但是当面对的业务多了后需要考虑到爬虫任务优先级的问题. 比如目前有3个业务线同时需要用一个爬虫, 3个业务线的重要程度不一样, 那么有以下几种方案:
-
开3个spider(不建议) 加入调度器进行优先级调度(加入了复杂度) 让scrapy-redis的start_urls支持优先级
项目地址
https://github.com/qshine/scrapy-redis
使用方法
git clone https://github.com/qshine/scrapy-redis.git cd scrapy-redis python setup.py install
在settings.py中设置该参数, 其它参数可以参考README
# settings.py ...... REDIS_URL = redis://:@127.0.0.1:6379 REDIS_START_URLS_KEY = %(name)s:start_urls REDIS_START_URLS_AS_ZSET = True ......
测试spider如下
# -*- coding: utf-8 -*- from scrapy_redis.spiders import RedisSpider class MysiteSpider(RedisSpider): name = mysite def parse(self, response): print(response.url)
向redis中添加3个优先级不同的任务
zadd mysite:start_urls 0 http://www.baidu.com 10 http://www.sina.com 5 http://www.163.com
启动spider, 日志如下
http://www.sina.com 2019-07-03 23:54:34 [mysite] DEBUG: Request not made from data: bhttp://www.sina.com http://www.163.com 2019-07-03 23:54:34 [mysite] DEBUG: Request not made from data: bhttp://www.163.com http://www.baidu.com 2019-07-03 23:54:34 [mysite] DEBUG: Request not made from data: bhttp://www.baidu.com
结语
scrapy-redis默认只支持redis中list和set数据结构, 但是当面对的业务多了后需要考虑到爬虫任务优先级的问题. 比如目前有3个业务线同时需要用一个爬虫, 3个业务线的重要程度不一样, 那么有以下几种方案: 开3个spider(不建议) 加入调度器进行优先级调度(加入了复杂度) 让scrapy-redis的start_urls支持优先级 项目地址 https://github.com/qshine/scrapy-redis 使用方法 git clone https://github.com/qshine/scrapy-redis.git cd scrapy-redis python setup.py install 在settings.py中设置该参数, 其它参数可以参考README # settings.py ...... REDIS_URL = redis://:@127.0.0.1:6379 REDIS_START_URLS_KEY = %(name)s:start_urls REDIS_START_URLS_AS_ZSET = True ...... 测试spider如下 # -*- coding: utf-8 -*- from scrapy_redis.spiders import RedisSpider class MysiteSpider(RedisSpider): name = mysite def parse(self, response): print(response.url) 向redis中添加3个优先级不同的任务 zadd mysite:start_urls 0 http://www.baidu.com 10 http://www.sina.com 5 http://www.163.com 启动spider, 日志如下 http://www.sina.com 2019-07-03 23:54:34 [mysite] DEBUG: Request not made from data: bhttp://www.sina.com http://www.163.com 2019-07-03 23:54:34 [mysite] DEBUG: Request not made from data: bhttp://www.163.com http://www.baidu.com 2019-07-03 23:54:34 [mysite] DEBUG: Request not made from data: bhttp://www.baidu.com 结语下一篇:
面试常问:redis面试常问知识点(上)