Python 如何在scrapy中获得刮削速度?

Python 如何在scrapy中获得刮削速度?,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,我当时正在用一个代理池抓取一个网站。它们中很少有非常快的,但是很少有代理非常慢,这让我想知道是否有任何方法可以检测中间件中网页的爬行速度(scrapedPages/分钟),这样我就可以丢弃较慢的代理 我可以在屏幕上看到日志级别INFO每分钟打印一次此速度 2015-12-04 11:28:50 [scrapy] INFO: Crawled 10 pages (at 10 pages/min), scraped 10 items (at 10 items/min) 但我无法在中间件中获得这样的速

我当时正在用一个代理池抓取一个网站。它们中很少有非常快的,但是很少有代理非常慢,这让我想知道是否有任何方法可以检测中间件中网页的爬行速度(scrapedPages/分钟),这样我就可以丢弃较慢的代理

我可以在屏幕上看到日志级别
INFO
每分钟打印一次此速度

2015-12-04 11:28:50 [scrapy] INFO: Crawled 10 pages (at 10 pages/min), scraped 10 items (at 10 items/min)
但我无法在中间件中获得这样的速度。这是我到目前为止试过的

class getSpeedstats(object):
    def __init__(self, stats):
        self.stats = stats

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.stats)

     def process_request(self, request, spider):
        print self.stats.get_stats()
上面的代码提供了以下输出:

{'log_count/DEBUG': 784, 'scheduler/dequeued': 408, 'log_count/INFO': 10, 'downloader/response_count': 392, 'downloader/response_status_count/200': 392, 'response_received_count': 392, 'scheduler/enqueued/memory': 408, 'downloader/response_bytes': 3209679, 'start_time': datetime.datetime(2015, 12, 4, 3, 48, 41, 31403), 'scheduler/dequeued/memory': 408, 'scheduler/enqueued': 408, 'downloader/request_bytes': 101321, 'downloader/request_method_count/GET': 407, 'downloader/request_count': 407, 'item_scraped_count': 391}

{'log_count/DEBUG': 786, 'scheduler/dequeued': 409, 'log_count/INFO': 11, 'downloader/response_count': 393, 'downloader/response_status_count/200': 393, 'response_received_count': 393, 'scheduler/enqueued/memory': 409, 'downloader/response_bytes': 3217865, 'start_time': datetime.datetime(2015, 12, 4, 3, 48, 41, 31403), 'scheduler/dequeued/memory': 409, 'scheduler/enqueued': 409, 'downloader/request_bytes': 101575, 'downloader/request_method_count/GET': 408, 'downloader/request_count': 408, 'item_scraped_count': 392}

但我仍然无法解释如何用这个来计算蜘蛛的速度。有人能告诉我还有其他方法吗?

这是
LogStats
扩展中的一个计算量,基本上是
当前页面-以前的页面
每分钟一次,您可以检查:

现在这不是一个真实的速度,因为它只考虑了特定的分钟数,总平均速度会更好,只需使用:

pages = self.stats.get_value('response_received_count')
print pages/((datetime.now() - self.stats.get_value('start_time')).seconds/60.0)

因此,您可以获得请求的平均速度/分钟

谢谢。这并没有消除多少疑问。这个
datetime(2015,12,4,9,27,45,718073)
code表示什么?是否比当前日期时间早1分钟?或者蜘蛛的开始时间?抱歉,我是
stats。开始时间
在响应次数超过分钟之前,将输出为零。谢谢@eLRuLL的回答。该代码确实给出了爬行的平均速度,但对于在考虑在执行广泛爬行(在某些间隔中IP改变)时代理慢的情况下作出决策的情况下,很难分析哪个代理速度较慢。你提供的链接确实解决了我计算速度的问题。