我正在使用代理池抓取网站。其中很少很快,但很少有代理非常慢,这让我想知道是否有任何方法可以检测中间件中抓取网页的速度(scrapedPages / minute),以便我可以丢弃较慢的代理。
我可以看到日志级别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}
但是我仍然无法解释如何通过这个来计算蜘蛛的速度。任何人都可以告诉我是否还有其他办法吗?
答案 0 :(得分:1)
这是LogStats
扩展程序中的计算金额,每分钟基本为current_pages - previous_pages
,您可以查看here:
现在这不是真正的IMO费率,因为它只考虑了特定的分钟,而且总的平均速度会更好,只需使用:
pages = self.stats.get_value('response_received_count')
print pages/((datetime.now() - self.stats.get_value('start_time')).seconds/60.0)
所以你可以得到请求的平均速度/分钟