Perl HTML :: TreeBuilder解析不正确

时间:2015-03-17 21:27:47

标签: html perl dom

我有以下代码,它使用HTML::TreeBuilder来解析网站上的HTML。

 my $urlToSpider = "http://www.yelp.com/biz/selden-standard-detroit";
 my $html = get $urlToSpider;

 $tree = HTML::TreeBuilder->new;
 #print $html;
 $tree->parse($html);

 print $tree->as_HTML;

在上面的示例中,当我将print $tree->as_HTML保存到文件时,HTML结构与原始结构不同,尽管print $html给出了正确的结构。

为什么模块解析不正确?

1 个答案:

答案 0 :(得分:1)

您所谓的错误解析只是不匹配的往返转换。 as_HTML方法的结果极不可能与源数据匹配,因为它只是与原始HTML 等效

由于但不限于这些原因会有差异

  • HTML数据可以包含无关紧要的空白,这对浏览器中呈现的内容没有影响。 HTML::TreeBuilder不会存储该空白并且无法重现该空白

  • HTML::TreeBuilder高度容忍原始HTML中的错误,并且其行为与真实的Web浏览器相似。因此,任何不严格有效的HTML都将被表示为对相同数据的有效解释

例如,如果我写

say HTML::TreeBuilder->new->parse('<p>text</p>')->as_HTML;

我得到了输出

<html><head></head><body><p>text</body></html>

因此,该模块已认识到完整文档应包含<html><head><body>元素,这对所有HTML数据的正常应用程序都适用。