是否有可能在定期的时间间隔内使用scrapy获取在抓取期间使用的传出和传入带宽等统计信息?
答案 0 :(得分:1)
是的,有可能。 =)
DownloaderStats middleware that comes with Scrapy已在统计信息中跟踪了总请求和响应字节数。您可以添加跟踪时间的其他downloader middleware并添加新统计信息。
以下是它的步骤:
1)在settings.py
中配置一个具有高订单号的新下载中间件,以便稍后在管道中执行:
DOWNLOADER_MIDDLEWARES = {
'testing.middlewares.InOutBandwithStats': 990,
}
2)将以下代码放入与middleware.py
settings.py
文件中
import time
class InOutBandwithStats(object):
def __init__(self, stats):
self.stats = stats
self.startedtime = time.time()
@classmethod
def from_crawler(cls, crawler):
return cls(crawler.stats)
def elapsed_seconds(self):
return time.time() - self.startedtime
def process_request(self, request, spider):
request_bytes = self.stats.get_value('downloader/request_bytes')
if request_bytes:
outgoing_bytes_per_second = request_bytes / self.elapsed_seconds()
self.stats.set_value('downloader/outgoing_bytes_per_second',
outgoing_bytes_per_second)
def process_response(self, request, response, spider):
response_bytes = self.stats.get_value('downloader/response_bytes')
if response_bytes:
incoming_bytes_per_second = response_bytes / self.elapsed_seconds()
self.stats.set_value('downloader/incoming_bytes_per_second',
incoming_bytes_per_second)
return response
就是这样。每当处理请求/响应时,都会调用process_request / process_response方法,并会相应地更新统计信息。
如果您想定期登录日志,也可以在那里拨打spider.log('Incoming bytes/sec: %s' % incoming_bytes_per_second)
。