目标网址为: 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之前,可能有一些方法可以消毒或强制编码。