【问题标题】:How can I make my scraper website-design-change-tolerant?我怎样才能让我的爬虫网站设计更改容错?
【发布时间】:2012-07-14 01:27:29
【问题描述】:

我用 ruby​​ 编写了一个网络爬虫。但是我正在抓取的网站已经改变了他们的设计。因此我的抓取器失败了。有没有一种聪明而简单的解决方案来解决这种刮板固有的问题? (例如……使用某种模式匹配、xpaths、比较 DOM 树……等等)

EM.run {
 http_request = EM::HttpRequest.new(url, opts).get
 http_request.callback { |body|
 doc = Nokogiri.parse(body.response)
 doc = Nokogiri::HTML(body.response)
 puts doc.css(".poster_information")
 puts doc.css(".date")
 puts doc.css(".comment_block")
}

在上面的示例代码 sn-p 中,我在一个网页的 css 选择器的帮助下抓取上述网站以获取海报信息、发布日期和 cmets。现在假设如果网站管理员更改了论坛的布局。 css 选择器将失败,因此我的整个刮板将失败。我不想在每次网站布局更改时更新我的​​爬虫。那么有什么方法可以让我的刮刀检测到网站布局的变化,它能够正确找到到达所需目的地的路径吗?因为我无法知道网站什么时候会发生变化。我只是想让我的刮刀自动化和容错

【问题讨论】:

  • 请网站提供API?
  • 如果没有您的源代码或对您的代码和您尝试解析的网站的非常详细的解释,我们将无法为您提供帮助。
  • 我编辑了问题...提供了一个代码 sn-p 和我试图解析的网站...
  • 希望这些网站同意这一点(提示:他们没有)。
  • @Baboon 这有点刻薄。

标签: ruby web-crawler scraper


【解决方案1】:

您可以编写定期运行的集成测试,以便在页面更改时通知您。如果页面结构经常变化,我也会将选择器模式提取到配置中,并且可以构建一个 UI 来轻松编辑我想要实际抓取的选择器。作为旁注,您可能也有兴趣查看capybara 以在更高级别控制刮板。如果您还需要 JS 功能,可以使用capybara-webkit

【讨论】:

    猜你喜欢
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2011-06-14
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多