3

我用 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")
}

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

4

1 回答 1

0

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

于 2012-07-18T16:38:35.603 回答