【问题标题】:How to make a parser for a web crawler maintainable如何使网络爬虫的解析器可维护
【发布时间】:2015-03-28 03:21:01
【问题描述】:

我编写了一个从第三方网站检索数据的 Ruby 网络爬虫。我正在使用 Nokogiri 根据特定的 CSS div 和特定字段提取信息(访问我提取的节点的子节点和元素)。

第三方网站的结构不时会发生变化,从而破坏爬虫(element[1].children[2]可能需要更改为element[2].children[0])。

到目前为止,我有一个实用程序可以打印我提取的节点的结构,它允许我在结构发生变化时快速修复解析器。我还有一个自动化流程,控制它可以提取“一些”值。

我想知道是否有更优雅的方式来处理这个问题。如何编写一个易于维护的爬虫?

【问题讨论】:

  • 如果你想在工业规模上做,你可以写一个浏览器插件,让外包工人点击你想刮的领域。然后它将找到这些字段的 XPATH 并提取值。如果格式发生变化,请添加一个任务(MTurk?)供人工加载页面并重新单击要提取的字段。
  • 给出的答案是很好的建议,但是,如果没有您尝试解析的 HTML 的实际示例,我们只能提供一般/通用建议。

标签: ruby web-crawler nokogiri


【解决方案1】:

你应该尽量使用网页的数据和元数据来找到你关心的元素,而不是像你现在这样使用元素索引号。

“class”和“id”属性是一个很好的方法。 Nokogiri 具有 XPath 功能,应该可以根据这些功能轻松选择元素。如果这不可能,您可以尝试查看元素周围页面的内容,例如如果您正在查找重量并且您知道它在表格中,您可以搜索以“kg”结尾的字符串。没有看到你正在解析的文档,很难给出超级具体的提示。

我建议您的爬虫检查数据是否正在检索,并在数据看起来错误时引发异常(或显示警告)。

【讨论】:

    【解决方案2】:

    使用 CSS。 例如,产品的价格几乎总是:

    page.at('#price, .price').text
    

    网站可以更改布局(主题),这仍然有效。

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 2019-04-17
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 2014-02-10
      • 1970-01-01
      相关资源
      最近更新 更多