我继承了别人的(可怕的)代码库,目前我正拼命想要解决问题。今天,这意味着在我们的模板/主页中收集所有死链接的列表。
我目前正在使用Python中的ElementTree,尝试使用xpath解析网站。不幸的是,似乎html格式不正确,而且ElementTree不断抛出错误。
是否有更多错误友好的xpath解析器?有没有办法在非严格模式下运行ElementTree?是否有其他方法(如预处理)可用于帮助此过程?
答案 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 ! (是的,我做过一次 - 幸运的是我有一个备份。: - )