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

问题描述 投票:2回答:4

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

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

还有更多错误友好的xpath解析器吗?有没有一种方法可以在非严格模式下运行ElementTree?还有其他任何方法(例如预处理)可用于帮助此过程吗?

python html xml xpath elementtree
4个回答
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>'

3
投票

我的荣幸!

最好用BeautifulSoup解析HTML。如首页所述:

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

更重要的是:

[Beautiful Soup解析您提供的所有内容,然后做树遍历的东西给你。您可以将其告诉“查找所有链接”,或者“查找类externalLink的所有链接”,或“查找所有链接其网址匹配“ foo.com”或“查找粗体的表标题文字,然后再给我该文字。“


2
投票

BeautifulSoup可以很好地处理格式错误的HTML。您当然也应该看看How do I fix wrongly nested / unclosed HTML tags?。在那里,也建议Tidy


1
投票

这有点麻烦,但是因为它是您感兴趣的链接,所以您也可以使用外部链接检查器。

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

注意:登录到具有管理员权限的帐户时,请运行not来运行它,否则它将忠实地在后台徘徊并开始对所有数据打delete! (是的,我曾经做过一次-幸运的是我有一个备份。:-)

© www.soinside.com 2019 - 2024. All rights reserved.