我是一个新手的刮和它的惊人的爬虫框架我知道!
在我的项目中,我发送了9万多个请求,但有些请求失败了。 我将日志级别设置为INFO,我只看到一些统计数据,但没有详细信息。
2012-12-05 21:03:04+0800 [pd_spider] INFO: Dumping spider stats:
{'downloader/exception_count': 1,
'downloader/exception_type_count/twisted.internet.error.ConnectionDone': 1,
'downloader/request_bytes': 46282582,
'downloader/request_count': 92383,
'downloader/request_method_count/GET': 92383,
'downloader/response_bytes': 123766459,
'downloader/response_count': 92382,
'downloader/response_status_count/200': 92382,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2012, 12, 5, 13, 3, 4, 836000),
'item_scraped_count': 46191,
'request_depth_max': 1,
'scheduler/memory_enqueued': 92383,
'start_time': datetime.datetime(2012, 12, 5, 12, 23, 25, 427000)}
有没有办法得到更详细的报告?例如,显示那些失败的url。谢谢!
是的,这是可能的。
我在spider类中添加了一个failed_URL列表,如果响应的状态是404,则将URL追加到该列表中(这需要扩展以覆盖其他错误状态)。
然后我添加了一个句柄,将列表连接到一个字符串中,并在蜘蛛关闭时将其添加到统计信息中。
根据您的评论,可以跟踪扭曲的错误。
输出(只有在实际抛出异常时才会显示下载程序/异常计数*统计信息-我在关闭无线适配器后尝试运行spider来模拟它们):
下面是另一个如何处理和收集404个错误(检查github帮助页)的示例:
只需使用
-o output.json
运行scrapy runspider
,并查看output.json
文件中的项目列表。来自@Talvalin和@alecxe的答案对我帮助很大,但它们似乎没有捕获不生成响应对象的下载程序事件(例如,
twisted.internet.error.TimeoutError
和twisted.web.http.PotentialDataLoss
)。这些错误在运行结束时显示在stats转储中,但没有任何元信息。正如我发现的here,错误由stats.py中间件跟踪,捕获在
DownloaderStats
类process_exception
方法中,特别是在ex_class
变量中,该变量根据需要增加每个错误类型,然后在运行结束时转储计数。要将这些错误与来自相应请求对象的信息相匹配,可以向每个请求添加一个唯一的id(通过
request.meta
),然后将其拉入stats.py
的process_exception
方法中:这将为每个基于下载程序的错误生成一个唯一的字符串,而不伴随响应。然后,您可以将修改后的
stats.py
另存为其他内容(例如my_stats.py
),将其添加到downloadermiddleware(具有正确的优先级),并禁用stockstats.py
:运行结束时的输出如下所示(这里使用meta info,其中每个请求url都映射到一个组id和成员id,用斜线分隔,如
'0/14'
):This answer处理基于非下载程序的错误。
相关问题 更多 >
编程相关推荐