我编写了一个Ruby Web爬虫程序,用于从第三方网站检索数据。我正在使用Nokogiri根据特定的CSS div和特定字段(访问子节点和我提取的节点的元素)提取信息。
第三方网站的结构会不时发生变化,从而导致抓取工具中断(element[1].children[2]
可能需要更改为element[2].children[0]
)。
到目前为止,我有一个实用程序可以打印我提取的节点的结构,这允许我在结构发生变化时快速修复解析器。我还有一个自动化过程控制它可以提取"一些"值。
我想知道是否有更优雅的方式来处理这个问题。如何编写易于维护的爬虫?
答案 0 :(得分:1)
你应该尝试使用网页的数据和元数据来尽可能多地找到你关心的元素,而不是像你一样使用元素索引号。
“class”和“id”属性是一种很好的方法。 Nokogiri具有XPath功能,可以根据这些功能轻松选择元素。如果无法做到这一点,您可以尝试查看元素周围的页面内容,例如如果你正在寻找一个重量并且你知道它在一个表中,你可以搜索以“kg”结尾的字符串。如果没有看到您要解析的文档,很难提供超级具体的提示。
如果数据看起来不对,我建议您的抓取工具检查数据是否正在检索并引发异常(或显示警告)。
答案 1 :(得分:1)
使用CSS。 例如,产品的价格几乎总是:
page.at('#price, .price').text
网站可以更改布局(主题),这仍然有用。