我已经用ruby写了一个网页抓取器。但是我正在抓取的网站已经改变了它们的design.Thus,我的刮板正在失效。有没有一种聪明而简单的解决方案来解决这种固有的刮刀问题?(例如..使用某种模式匹配、xpath、比较DOM tress...etc)
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选择器将失败,因此我的整个抓取器也将失败。我不想每次网站的布局改变时都更新我的刮板。那么有没有办法让我的抓取器检测到网站布局的改变,并且能够正确地找到到达所需目的地的路径呢?因为我没有办法知道网站什么时候会改变。我只是想让我的刮刀自动化和容错。
发布于 2012-07-19 00:38:36
您可以编写定期运行的集成测试,以便在页面更改时通知您。如果页面结构频繁更改,我还会将选择器模式提取到一个配置中,并构建一个UI来方便地编辑我想要实际抓取的选择器。顺便说一句,您可能还有兴趣检出capybara,以便在更高的级别上控制刮板。如果您还需要JS功能,则可以使用capybara-webkit。
https://stackoverflow.com/questions/11480266
复制相似问题