如何使用标准库在python中解析格式错误的HTML

buk*_*zor 37 html python parsing dom html-parsing

python中内置了很多html和xml库,很难相信不支持实际的HTML解析.

我已经为这个任务找到了很多很棒的第三方库,但是这个问题是关于python标准库的.

要求:

  • 仅使用Python标准库组件(任何2.x版本)
  • DOM支持
  • 处理HTML实体( )
  • 手柄部分文件(如:Hello, <i>World</i>!)

奖励积分:

  • XPATH支持
  • 处理未封闭/格式错误的标签.(<big>does anyone here know <html ???

根据要求,这是我的90%解决方案.这适用于我尝试过的有限的HTML集,但正如每个人都可以清楚地看到的那样,这并不完全可靠.因为我通过盯着文档15分钟和一行代码来做到这一点,我想我可以咨询stackoverflow社区以获得类似但更好的解决方案......

from xml.etree.ElementTree import fromstring
DOM = fromstring("<html>%s</html>" % html.replace('&nbsp;', '&#160;'))
Run Code Online (Sandbox Code Playgroud)

Ian*_*ing 44

可靠地解析HTML是一个相对现代的发展(虽然看起来很奇怪).因此,标准库中绝对没有任何内容. HTMLParser可能看起来是一种处理HTML的方式,但事实并非如此 - 它在很多非常常见的HTML上都失败了,尽管你可以解决这些失败,但总会有另一个你没想过的案例(如果你真的成功了)在处理每一次失败时,你基本上都会重新创建BeautifulSoup).

实际上只有3种合理的方法可以解析HTML(因为它可以在网上找到):lxml.html,BeautifulSouphtml5lib.到目前为止,lxml是最快的,但安装起来可能有点棘手(在App Engine这样的环境中也是如此).html5lib基于HTML 5如何指定解析; 虽然在实践中与其他两个类似,但它在解析破碎的HTML方面可能更"正确"(它们都解析相当好的HTML).他们都在解析破碎的HTML方面做得很好.虽然我发现它的API不必要地古怪,但BeautifulSoup可能很方便.


Dav*_*d Z 5

获取BeautifulSoup的源代码并将其复制到您的脚本中;-)我只是在开玩笑......你能写的任何可以完成工作的东西或多或少都会复制像这样的库中已经存在的功能.

如果那真的不起作用,我不得不问,为什么只使用标准库组件这么重要?