Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使web爬虫的解析器可维护_Ruby_Web Crawler_Nokogiri - Fatal编程技术网

Ruby 如何使web爬虫的解析器可维护

Ruby 如何使web爬虫的解析器可维护,ruby,web-crawler,nokogiri,Ruby,Web Crawler,Nokogiri,我编写了一个Ruby网络爬虫,它从第三方网站检索数据。我使用Nokogiri根据特定CSS div和特定字段(访问我提取的节点的子节点和元素)提取信息 有时,第三方网站的结构会发生变化,从而破坏爬虫程序(元素[1]。子元素[2]可能需要更改为元素[2]。子元素[0]) 到目前为止,我有一个实用程序可以打印我提取的节点的结构,它允许我在结构发生变化时快速修复解析器。我也有一个自动化的过程,控制它可以提取“一些”值 我想知道是否有更优雅的方式来处理这个问题。如何编写一个易于维护的爬虫程序?您应该尽量

我编写了一个Ruby网络爬虫,它从第三方网站检索数据。我使用Nokogiri根据特定CSS div和特定字段(访问我提取的节点的子节点和元素)提取信息

有时,第三方网站的结构会发生变化,从而破坏爬虫程序(
元素[1]。子元素[2]
可能需要更改为
元素[2]。子元素[0]

到目前为止,我有一个实用程序可以打印我提取的节点的结构,它允许我在结构发生变化时快速修复解析器。我也有一个自动化的过程,控制它可以提取“一些”值


我想知道是否有更优雅的方式来处理这个问题。如何编写一个易于维护的爬虫程序?

您应该尽量使用网页的数据和元数据来查找您最关心的元素,而不是像现在这样使用元素索引号

“class”和“id”属性是一种很好的方法。Nokogiri具有XPath特性,可以轻松地基于这些特性选择元素。如果不可能,您可以尝试查看元素周围的页面内容,例如,如果您正在查找权重,并且知道它在表中,则可以搜索以“kg”结尾的字符串。在没有看到您正在解析的文档的情况下,很难给出超级具体的提示

我建议您的爬虫程序检查正在检索的数据,如果数据看起来有误,则引发异常(或显示警告)。

使用CSS。 例如,产品的价格几乎总是:

page.at('#price, .price').text

该站点可以更改布局(主题),这仍然有效。

如果您想在工业规模上实现,您可以编写一个浏览器插件,并让外包人员单击您想要刮取的字段。然后,它将找到这些字段的XPATH并提取值。如果格式发生变化,请添加一个任务(MTurk?)供人工加载页面并重新单击要提取的字段。给出的答案是非常好的建议,但是,如果没有您试图解析的HTML的实际示例,我们只能提供一般/通用建议。