计算scrapy webspider的覆盖范围

时间:2014-11-14 03:18:00

标签: python web-scraping scrapy scrapy-spider

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

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

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

1 个答案:

答案 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原则 - 一个信号处理程序。


其他想法:

  • 您甚至可以将响应网址和错误追溯放入数据库中进行以下审核 - 这仍然是“日志记录”,但结构化的方式可以更方便以后再进行审核
  • 一个好主意可能是创建自定义异常来表示不同的抓取错误,例如:MissingRequiredFieldErrorInvalidFieldFormatError,如果已抓取的字段未通过验证,您可以提出这些异常。