使用XPATH处理格式错误的HTML文件

时间:2012-05-25 15:30:54

标签: python xml xpath elementtree

我继承了别人的(可怕的)代码库,目前我正拼命想要解决问题。今天,这意味着在我们的模板/主页中收集所有死链接的列表。

我目前正在使用Python中的ElementTree,尝试使用xpath解析网站。不幸的是,似乎html格式不正确,而且ElementTree不断抛出错误。

是否有更多错误友好的xpath解析器?有没有办法在非严格模式下运行ElementTree?是否有其他方法(如预处理)可用于帮助此过程?

4 个答案:

答案 0 :(得分:5)

LXML可以解析一些格式错误的HTML,实现ElementTree API的扩展版本,并支持XPath:

>>> from lxml import html
>>> t = html.fromstring("""<html><body>Hello! <p> Goodbye.</body></html""")
>>> html.tostring(t.xpath("//body")[0])
'<body>Hello! <p> Goodbye.</p></body>'

答案 1 :(得分:3)

我的怜悯!

您最好使用BeautifulSoup解析HTML。正如主页所述:

  

你没有写那个糟糕的页面。你只是想获得一些数据   出来的。美丽的汤在这里提供帮助。自2004年以来,它一直是   在快速周转屏幕上节省程序员数小时或数天的工作时间   刮刮项目。

更重要的是:

  

美丽的汤解析你给它的任何东西,然后做树   遍历你的东西。您可以告诉它“查找所有链接”,或   “查找class externalLink的所有链接”或“查找所有链接”   其网址与“foo.com”相匹配,或者“查找大胆的表格标题”   文字,然后给我那个文字。“

答案 2 :(得分:2)

BeautifulSoup可以很好地处理格式错误的HTML。你也应该看看How do I fix wrongly nested / unclosed HTML tags?。在那里,还提出了Tidy

答案 3 :(得分:1)

这有点旧,但由于它是您感兴趣的链接,您还可以使用外部链接检查器。

我已经使用Xenu Link Sleuth多年了,效果很好。我有几个网站有超过15,000个内部页面,并在局域网上运行Xenu,同时有30个线程,检查网站大约需要5-8分钟。检查所有链接类型(页面,图像,CSS,JS等),并且有一个简单但有用的排除机制。它使用MSIE的任何授权在XP / 7上运行,因此您可以检查您网站的会员/非会员视图。

注意:当登录到具有管理员权限的帐户时,运行它,或者它将在后台尽职地漫步并开始在所有数据上点击 delete ! (是的,我做过一次 - 幸运的是我有一个备份。: - )