zoukankan      html  css  js  c++  java
  • 数据采集: 让scrapy-redis的start_urls支持优先级

    scrapy-redis默认只支持redis中listset数据结构, 但是当面对的业务多了后需要考虑到爬虫任务优先级的问题. 比如目前有3个业务线同时需要用一个爬虫, 3个业务线的重要程度不一样, 那么有以下几种方案:

    • 开3个spider(不建议)
    • 加入调度器进行优先级调度(加入了复杂度)
    • scrapy-redisstart_urls支持优先级

    当时也是面临这个问题, 采用的是加入了一层调度器来运行, 后来抽时间给scrapy-redis提供了支持start_urls优先级的feature, 通过在settings.py中设置参数就可以支持了, 测试也已经通过, 可能项目作者太忙了, 没有给这个PR反馈.

    项目地址

    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: 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.

  • 相关阅读:
    git 备忘录
    模拟HTTP协议接收请求并返回信息
    微信公众号支付回调页面处理asp.net
    WinForm下判断文件和文件夹是否存在
    C# 如何判断ie版本号和获取注册表中的信息
    【转】GDI+中发生一般性错误的解决办法
    c# winform 获取当前程序运行根目录
    模拟按下某快捷键:keybd_event使用方法
    如何使用存储过程来实现分页功能
    用ASP.NET实现下载远程图片保存到本地的方法 保存抓取远程图片的方法
  • 原文地址:https://www.cnblogs.com/zlone/p/11129953.html
Copyright © 2011-2022 走看看