1

我正在编写网络蜘蛛,以使用python 中的scrapy框架从网站上废弃一些产品。我想知道计算书面蜘蛛的覆盖率和缺失项目的最佳实践是什么。

我现在使用的是记录无法解析或引发异常的案例。举个例子:当我期望产品价格或地点地址的特定格式时,我发现我编写的正则表达式与报废的字符串不匹配。或者当我xpath的特定数据选择器什么都不返回时。

有时,当产品在一页或多个页面中列出时,我也会使用curlgrep粗略计算产品数量。但我想知道是否有更好的做法来处理这个问题。

4

1 回答 1

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

您还可以使用信号来捕获和记录爬网时发生的各种异常,请参阅:

当您让蜘蛛失败并在一个特定的位置(信号处理程序)中捕获和处理错误时,这基本上遵循更容易请求宽恕而不是许可原则。


其他想法:

  • 您甚至可以将响应 url 和错误回溯放入数据库中以供后续审查 - 这仍然是“日志记录”,但采用结构化方式,以后可以更方便地查看
  • 一个好主意可能是创建自定义异常来表示不同的爬网错误,例如:MissingRequiredFieldErrorInvalidFieldFormatError如果爬网字段未通过验证,您可以提出该异常。
于 2014-11-14T03:31:18.437 回答