解析HTML这不是有效的XML

问题描述:

我需要分析一个网站,全国各地有很多嵌套<div> S的。我试着用XML::Simple来获得一个很好的树型结构,但解析一直失败,因为似乎有两三个关闭<p>的地方。我试过HTML::Parser,但是这只能让我定义一些处理函数,它给了我正确的标签,但不是它们的嵌套元素。解析HTML这不是有效的XML

有没有办法让XML::Simple接受无效的XML或HTML::Parser给我一个方便的树结构?

+4

HTML不是XML。为什么你会期望XML解析器解析它? – geoffspear 2011-03-07 15:40:59

+0

@Wooble因为,在我的心里,我希望它是。 – Lanbo 2011-03-07 15:44:29

+0

一种基于的东西替代[HTML :: TreeBuilder作为] []是[XML :: LibXML-> load_html(...)] [XML ::的libxml ::分析器load_html]。 [HTML :: TreeBuilder作为]:http://search.cpan.org/perldoc/HTML::TreeBuilder [XML ::的libxml ::分析器load_html]:http://search.cpan.org/perldoc/XML :: LibXML :: Parser#DOM_Parser – reinierpost 2011-03-07 16:15:05

HTML::TreeBuilder建立很好的树木,并给出吨方便的方法来遍历它。

+0

TreeBuilder为我做了。我正在使用的服务器没有XML :: LibXML,我无法安装它。非常感谢您的帮助! – Lanbo 2011-03-10 13:34:19

但它是有效的HTML?如果是这样,如果您使用HTML解析功能,XML::LibXML将做一个了不起的工作。它闪电般快,并提供一个很好的界面。它甚至应该能够使用recover选项来处理一些错误的HTML。

或者,HTML::Parser(通常通过HTML::TreeBuilderHTML::TreeBuilder::XPath使用)声称用于处理错误的HTML。尽管如此,它不会那么快。