我继承了别人的(可怕的)代码库,目前正在拼命尝试修复问题。今天,这意味着在我们的模板/主页中收集所有死链接的列表。
我目前在 Python 中使用 ElementTree,尝试使用 xpath 解析站点。不幸的是,似乎 html 格式错误,并且 ElementTree 不断抛出错误。
是否有更多错误友好的 xpath 解析器?有没有办法在非严格模式下运行 ElementTree?是否有任何其他方法(例如预处理)可用于帮助此过程?
我继承了别人的(可怕的)代码库,目前正在拼命尝试修复问题。今天,这意味着在我们的模板/主页中收集所有死链接的列表。
我目前在 Python 中使用 ElementTree,尝试使用 xpath 解析站点。不幸的是,似乎 html 格式错误,并且 ElementTree 不断抛出错误。
是否有更多错误友好的 xpath 解析器?有没有办法在非严格模式下运行 ElementTree?是否有任何其他方法(例如预处理)可用于帮助此过程?
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>'
我的同情!
你最好用BeautifulSoup解析你的 HTML 。正如主页所述:
你没有写那个糟糕的页面。你只是想从中获取一些数据。美丽的汤在这里为您提供帮助。自 2004 年以来,它一直在为程序员节省数小时或数天的快速周转屏幕抓取项目的工作。
更重要的是:
Beautiful Soup 解析你给它的任何东西,并为你做树遍历的东西。您可以告诉它“查找所有链接”,或“查找类 externalLink 的所有链接”,或“查找所有 url 匹配“foo.com”的链接,或“查找带有粗体文本的表格标题,然后给出我那条短信。”
BeautifulSoup可以很好地处理格式错误的 HTML。您还应该看看如何修复错误嵌套/未闭合的 HTML 标记?. 在那里,还建议使用Tidy。
这有点 OT,但由于它是您感兴趣的链接,您也可以使用外部链接检查器。
我已经使用Xenu Link Sleuth多年了,效果很好。我有几个站点,它们有超过 15,000 个内部页面,并且在 LAN 上运行 Xenu,同时有 30 个线程,检查站点大约需要 5-8 分钟。检查所有链接类型(页面、图像、CSS、JS 等),并且有一个简单但有用的排除机制。它在 XP/7 上运行,具有 MSIE 的任何授权,因此您可以检查您网站的会员/非会员视图。
注意:登录到具有管理员权限的帐户时不要运行它,否则它会尽职尽责地在后台徘徊并开始删除您的所有数据!(是的,我做过一次——幸运的是我有备份。:-)