【问题标题】:Processing badly formed HTML files with XPATH使用 XPATH 处理格式错误的 HTML 文件
【发布时间】:2012-06-01 04:51:36
【问题描述】:

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

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

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

【问题讨论】:

  • HTMLTidy (w3.org/People/Raggett/tidy) 可用于将 HTML 转换为格式良好的 XML 文档。 “死链接”是什么意思?

标签: python html xml xpath elementtree


【解决方案1】:

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

【讨论】:

  • 但它不支持 XPath。
【解决方案2】:

我的同情!

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

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

更重要的是:

Beautiful Soup 会解析你给它的任何东西,然后生成树 为你遍历的东西。您可以告诉它“查找所有链接”,或者 "查找类 externalLink 的所有链接",或"查找所有链接 其网址匹配“foo.com”,或“查找加粗的表格标题 文本,然后给我那个文本。”

【讨论】:

  • 这看起来正是我所需要的。谢谢。
  • 但它不支持 XPath。
  • @VajkHermecz 不。它确实支持一组有限的 CSS 选择器,但您可以交换解析器。后者对于 HTML 输入的损坏有很大帮助; html5lib 可以针对给定文档以不同于 lxml 的方式修复 html,其方式可能对手头的任务很重要。
【解决方案3】:

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>'

【讨论】:

    【解决方案4】:

    这有点 OT,但既然是你感兴趣的链接,你也可以使用外部链接检查器。

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

    注意:不要在登录到具有管理员权限的帐户时运行它,否则它会尽职尽责地在后台徘徊并开始对您的所有数据点击 delete! (是的,我做过一次——幸运的是我有备份。:-)

    【讨论】:

      猜你喜欢
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多