用于RQ的Scrapy Crawler
os-scrapy-rq-crawler的Python项目详细描述
os scrapy rq爬虫程序
本项目为RQ模式提供爬虫。基于Scrapy 2.0+,需要Python3.6+
Scrapy框架用于对特定站点进行爬网。这对"Broad Crawls"不好。Scrapy内置的调度机制不适用于多个域,它使用一个通道队列来处理所有不同域的请求。计划程序无法决定对指定域的请求进行爬网。在
RQ模式是广泛爬网的关键机制/概念。其核心是请求队列,它实际上是一个队列,不同域的请求在不同的子队列中。在
使用os-rq-pod和os-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
许可证
麻省理工学院授权。在
- 项目
标签: