我在ruby中写过一个web scraper。但我正在抓的网站改变了他们的设计。因此我的刮刀失败了。有没有一个聪明而简单的解决方案来解决这种刮刀固有的问题? (例如..使用某种模式匹配,xpath,比较DOM tress ......等)
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选择器将失败,因此我的整个刮刀将失败。每当网站的布局发生变化时,我都不想更新我的刮刀。那么有什么方法可以让我的刮刀检测到网站布局的变化,并且能够正确找到所需目的地的路径吗?因为我无法知道网站什么时候会改变..我只是想让我的刮刀自动化和容错
答案 0 :(得分:0)
您可以编写定期运行的集成测试,以便在页面更改时通知您。如果页面结构经常更改,我还会将选择器模式提取到配置中,并可以构建一个UI来轻松编辑我想要实际抓取的选择器。作为旁注,您可能还有兴趣检查capybara以更高级别控制刮刀。如果您还需要JS功能,则可以使用capybara-webkit。