我正在使用scrapy抓取一些网站.如何获取队列中的请求数?
我查看了scrapy源代码,发现scrapy.core.scheduler.Scheduler可能导致我的回答.请参阅:https://github.com/scrapy/scrapy/blob/0.24/scrapy/core/scheduler.py
两个问题:
self.dqs和self.mqs在调度类是什么意思?Bra*_*rad 15
我花了一段时间才弄清楚,但这是我用过的东西:
self.crawler.engine.slot.scheduler
这是调度程序的实例.然后,您可以调用__len__()它的方法,或者如果您对待处理的请求只需要true/false,请执行以下操作:
self.crawler.engine.scheduler_cls.has_pending_requests(self.crawler.engine.slot.scheduler)
Run Code Online (Sandbox Code Playgroud)
请注意,即使队列为空,仍然可能存在运行请求.要检查当前正在运行的请求数,请使用:
len(self.crawler.engine.slot.inprogress)
Run Code Online (Sandbox Code Playgroud)
回答您的问题的方法:
默认情况下,Scrapy 使用 LIFO 队列来存储待处理的请求,这基本上意味着它按照 DFO 顺序进行爬网。在大多数情况下,此顺序更方便。如果您确实想按照真正的 BFO 顺序进行爬网,可以通过设置以下设置来实现:
DEPTH_PRIORITY = 1
SCHEDULER_DISK_QUEUE = 'scrapy.squeue.PickleFifoDiskQueue'
SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue.FifoMemoryQueue'
Run Code Online (Sandbox Code Playgroud)
因此self.dqs和self.mqs是自动esplicative(磁盘队列调度程序和内存队列调度程序)。
从另一个SO答案中,有一个关于访问(在数据库中存储scrapy队列)scrapy insidee queque rappresentation queuelib https://github.com/scrapy/queuelib的建议
一旦你得到它,你只需要计算队列的长度。
| 归档时间: |
|
| 查看次数: |
4401 次 |
| 最近记录: |