Nokogiri和真实浏览器之间的结果不同

时间:2014-08-26 19:13:57

标签: ruby-on-rails parsing nokogiri open-uri

目标网址为: http://courts.delaware.gov/opinions/List.aspx?ag=all+courts

它似乎只检索前10个链接,而真正的浏览器检索50个链接。

以下是重现错误的示例代码:

require 'open-uri'
require 'nokogiri'

doc=Nokogiri::HTML(open("http://courts.delaware.gov/opinions/List.aspx?ag=all+courts", 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko/20100101 Firefox/31.0'))
p "there are missing links" if doc.css('strong a').size < 50

打开open("http://courts.delaware.gov/opinions/List.aspx?ag=all+courts", 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko/20100101 Firefox/31.0')生成的文件时,我会看到完整和预期的HTML。

从Nokogiri返回的结果doc被截断,在第10个链接后关闭HTML标记,没有其他内容。

这让我相信有些东西会误导Nokogiri HTML解析器提前终止。

编辑:看起来HTML中存在格式错误。当我删除最后一个<tr>...</tr>元素时,Nokogiri会抓取更多链接。我仍然不确定问题到底是什么,以及如何配置Nokogiri以获取所有内容。

EDIT2:问题是Nokogiri在遇到特殊字符和无效的UTF-8 \x002后停止解析。在Nokogiri解析这个bug之前,可能有一些方法可以消毒或强制编码。

0 个答案:

没有答案