用于RQ的Scrapy Crawler

os-scrapy-rq-crawler的Python项目详细描述


os scrapy rq爬虫程序

Build StatuscodecovPyPI - Python VersionPyPI

本项目为RQ模式提供爬虫。基于Scrapy 2.0+,需要Python3.6+

Scrapy框架用于对特定站点进行爬网。这对"Broad Crawls"不好。Scrapy内置的调度机制不适用于多个域,它使用一个通道队列来处理所有不同域的请求。计划程序无法决定对指定域的请求进行爬网。在

RQ模式是广泛爬网的关键机制/概念。其核心是请求队列,它实际上是一个队列,不同域的请求在不同的子队列中。在

使用os-rq-podos-rq-hub进行部署,您可以构建一个大型可伸缩的分布式“广泛爬行”系统。在

快速入门

我们为RQ模式提供爬虫。因为Scrapy框架不能自定义Crawler类,所以可以使用os-scrapy(与此项目一起安装)开始爬网。在

  • 安装

    pip install os-scrapy-rq-crawler
    
  • 开始你的项目

    ^{pr2}$ 在
  • 在项目中设置爬虫类和enable asyncio reactor设置.py在

    CRAWLER_CLASS = "os_scrapy_rq_crawler.asyncio.Crawler"
    TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
    
  • 开始爬行示例蜘蛛

    os-scrapy crawl example
    

安装

pip install os-scrapy-rq-crawler

当您已经安装了os-scrapy之后,您可以在这个项目的根路径中直接运行示例spider

os-scrapy crawl example

使用

此项目提供爬虫类可在项目中按配置使用设置.py文件。它也可以直接作为一个垃圾项目使用。在

爬虫类

这个项目提供爬虫来启用RQ模式。Scrapy框架无法配置Crawler类,因此可以使用os-scrapy指定

  • 在设置.py在

    CRAWLER_CLASS = "os_scrapy_rq_crawler.asyncio.Crawler"
    
  • 或使用-c命令行选项

    os-scrapy crawl -c os_scrapy_rq_crawler.asyncio.Crawler example
    

因为爬虫程序在asyncio reactor上部署,所以需要启用它

  • 在设置.py在

    TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
    
  • 或使用-r命令行选项

    os-scrapy crawl -r asyncio example
    

请求队列

RQ只是一个可以用不同方式实现的概念。在

  • 中的配置设置.py文件

    SCHEDULER_REQUEST_QUEUE = "os_scrapy_rq_crawler.AsyncRequestQueue"
    
  • os_scrapy_rq_crawler.MemoryRequestQueue

    • 默认的重新排队队列
    • 内存中的所有请求
    • 当队列中没有请求时,spider关闭,spider is idle
  • os_scrapy_rq_crawler.AsyncRequestQueue

    • 可与os-rq-pod或{a8}一起用作外部请求队列

    • 即使没有爬网请求,蜘蛛也不会关闭

    • 在中配置pod/hub http api设置.py在

      RQ_API = "http://localhost:6789/api/"
      
    • 配置api超时

      RQ_API_TIMEOUT = 3.0
      

仅供参考

Crawler是Crawler-q的替代品。大多数无用的功能(中间件/扩展)也可以正常使用。在

这里有一些提示:

  • 请求队列为fifo,尚不支持优先级
  • 来自下载程序中间件的请求将推送到请求队列的头
  • 同一域的请求不会并发爬网,CONCURRENT_REQUESTS控制最大并发,DOWNLOAD_DELAY控制下载延迟
  • 您可以设置请求延迟:请求.meta[“下载延迟”]=3.0

单元测试

sh scripts/test.sh

许可证

麻省理工学院授权。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java正在寻找Java8中的内置函数以忽略异常   javascript JQuery更改Div的颜色   java PostgreSQL使用JDBC写入inet列   java为什么体重指数计算结果不正确?   java禁用linux中的log4j控制台日志记录   java我可以让我的JMS主题在新订阅者连接时通知发布者(使用ActiveMQ)   基于三个浮点输入的java过滤器JTable?   Java OpenGL/LWJGL体素纹理   在SpringBoot java应用程序中,有没有一种方法可以通过不同的机器使用hostIP作为主机远程连接到redis服务器   java Struts 2 s:提交按钮语法以在映射中设置值   java源代码:setDomainEnv。windows 7中的cmd文件   缺少货币计算java的返回语句   JavaHibernate没有注意到从其他源进行的数据库更新   无法在OpenCV/Java中生成负矩阵   Java不做循环   java无法使用类对象写入文件ArrayList   jpa使用数组作为调用Java的存储过程的输入   java使用文件提供程序检索内容Uri失败   需要java程序来创建方法模板