抓取结束时那一大串 stats 里的每个数字怎么来的?response_count 和 response_received_count 为什么不一样?bytes 数的是什么字节?怎么加自己的统计?这篇用一次很小的抓取把 stats 逐项对账。
downloader/request_bytes 1246 downloader/request_count 5 downloader/request_method_count/GET 5 downloader/response_bytes 710 downloader/response_count 5 downloader/response_status_count/200 3 downloader/response_status_count/302 1 downloader/response_status_count/404 1 dupefilter/filtered 1 elapsed_time_seconds 0.01 finish_reason finished finish_time <datetime> item_scraped_count 2 items_per_minute None log_count/INFO 2 memusage/max 91160576 memusage/startup 91160576 request_depth_max 1 response_received_count 4 responses_per_minute None scheduler/dequeued 5 scheduler/dequeued/memory 5 scheduler/enqueued 5 scheduler/enqueued/memory 5 start_time <datetime>
downloader/request_count、response_count 由下载器统计中间件记;response_received_count 是引擎发出 response_received 信号的次数,被重定向、重试中间件消费掉的响应不算。
小页面(15 字节):服务器实际收到请求 226 字节;stats downloader/request_bytes = 221
服务器实际发出响应 92 字节(头 77 + 体 15);stats downloader/response_bytes = 92
大页面(20,000 字节):服务器实际收到请求 226 字节;stats downloader/request_bytes = 221
服务器实际发出响应 20077 字节(头 80 + 体 19997);stats downloader/response_bytes = 20077response_bytes 是线上头加体的字节数;request_bytes 来自请求的合成文本(Host 头不带端口),比线上略短。
stats 里 mine/* 的键:mine/bytes=1135, mine/last_url=a, mine/max_len=95, mine/min_len=20, mine/pages=3
回调里 get_value 读到的(最后一次):{'get': 3, 'missing': 'DEFAULT', 'n': 21, 't': 137.2}crawler.stats 提供 inc_value、set_value、max_value、min_value、get_value、get_stats。
默认 MemoryStatsCollector:日志里有 “Dumping Scrapy stats”:是;日志里打出的键数 25;spider.closed() 里 crawler.stats.get_stats() 的键数 20 DummyStatsCollector:日志里有 “Dumping Scrapy stats”:是;日志里打出的键数 0;spider.closed() 里 crawler.stats.get_stats() 的键数 0 STATS_DUMP=0:日志里有 “Dumping Scrapy stats”:否;日志里打出的键数 0;spider.closed() 里 crawler.stats.get_stats() 的键数 20
STATS_CLASS 换成 DummyStatsCollector 完全不记;STATS_DUMP = 0 只是不在结束时打印。
DEBUG 级别的运行:log_count/DEBUG=8, log_count/INFO=2, memusage/max=90800128, memusage/startup=90800128 elapsed_time_seconds 与 finish_time − start_time:0.0091 s / 0.0091 s
log_count/* 按日志级别计数,memusage/* 来自 MemoryUsage 扩展,elapsed_time_seconds 等于结束时间减开始时间。