我正在编写网络蜘蛛,使用python中的scrapy框架从网站中删除一些产品。 我想知道计算书面蜘蛛的覆盖范围和缺失项目的最佳实践是什么。
我现在正在使用的是记录无法解析或引发异常的案例。
作为一个例子:当我期望产品价格或地点的地址的特定格式,我发现我写的正则表达式与报废的字符串不匹配。或当我的xpath
特定数据选择器没有返回时。
有时,当产品列在一个页面或多个产品中时,我会使用curl
和grep
来粗略计算产品数量。但我想知道是否有更好的做法来处理这个问题。
答案 0 :(得分:1)
通常的做法是,使用logging
来记录错误并通过不返回任何内容来退出回调。
示例(需要产品价格):
loader = ProductLoader(ProductItem(), response=response)
loader.add_xpath('price', '//span[@class="price"]/text()')
if not loader.get_output_value('price'):
log.msg("Error fetching product price", level=log.ERROR)
return
您还可以使用signals来捕获并记录抓取时发生的所有异常,请参阅:
当你让蜘蛛失败并在一个特定的地方捕捉并处理错误时,这基本上遵循Easier to ask for forgiveness than permission原则 - 一个信号处理程序。
其他想法:
MissingRequiredFieldError
,InvalidFieldFormatError
,如果已抓取的字段未通过验证,您可以提出这些异常。