使用 Scrapy 按固定时间间隔传出和传入带宽
Outgoing and Incoming Bandwidth at regular interval of time using Scrapy
是否可以定期使用 scrapy 获取抓取过程中使用的传出和传入带宽等统计信息?
是的,这是可能的。 =)
总请求和响应字节数已由跟踪时间并添加新统计信息的 DownloaderStats middleware that comes with Scrapy. You can add another downloader middleware 在统计信息中跟踪。
步骤如下:
1) 在 settings.py
中配置新的下载器中间件,并使用高序号以便稍后在管道中执行:
DOWNLOADER_MIDDLEWARES = {
'testing.middlewares.InOutBandwithStats': 990,
}
2) 将以下代码放入与 settings.py
相同目录下的 middleware.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 方法将在处理 request/response 时调用,并将相应地不断更新统计数据。
如果你想定期获得日志,你也可以在那里调用 spider.log('Incoming bytes/sec: %s' % incoming_bytes_per_second)
。
阅读更多
是否可以定期使用 scrapy 获取抓取过程中使用的传出和传入带宽等统计信息?
是的,这是可能的。 =)
总请求和响应字节数已由跟踪时间并添加新统计信息的 DownloaderStats middleware that comes with Scrapy. You can add another downloader middleware 在统计信息中跟踪。
步骤如下:
1) 在 settings.py
中配置新的下载器中间件,并使用高序号以便稍后在管道中执行:
DOWNLOADER_MIDDLEWARES = {
'testing.middlewares.InOutBandwithStats': 990,
}
2) 将以下代码放入与 settings.py
middleware.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 方法将在处理 request/response 时调用,并将相应地不断更新统计数据。
如果你想定期获得日志,你也可以在那里调用 spider.log('Incoming bytes/sec: %s' % incoming_bytes_per_second)
。