4

我有一些随机的 HTML,我使用 BeautifulSoup 来解析它,但在大多数情况下(>70%)它会阻塞。我尝试使用Beautiful soup 3.0.8 和3.2.0(3.1.0 向上存在一些问题),但结果几乎相同。

我可以回想起 Python 中可用的几个 HTML 解析器选项:

  • 美丽汤
  • lxml
  • 查询

我打算测试所有这些,但我想知道你的测试中哪一个是最宽容的,甚至可以尝试解析错误的 HTML。

4

4 回答 4

3

他们都是。我还没有遇到任何在野外发现的 lxml.html 无法解析的 html 页面。如果您尝试解析的页面上有 lxml barfs,您始终可以使用一些正则表达式对它们进行预处理以保持 lxml 满意。

lxml 本身相当严格,但lxml.html它是一个不同的解析器,可以处理非常破碎的 html。对于非常糟糕的 html,lxml 还附带lxml.html.soupparser了 BeautifulSoup 库的哪些接口。

此处描述了一些使用 lxml.html 解析损坏的 html 的方法:http: //lxml.de/elementsoup.html

于 2011-07-29T08:30:13.400 回答
2

对于不能与其他任何东西一起使用的页面(想到那些包含嵌套<form>元素的页面),我在MinimalSoupICantBelieveItsBeautifulSoup方面取得了成功。每个人都可以处理某些类型的错误,而另一个人则不能,因此您需要同时尝试两者。

于 2011-07-29T12:21:30.600 回答
2

我最终使用 BeautifulSoup 4.0 和 html5lib 进行解析,并且更加宽容,对我的代码进行了一些修改,它现在运行良好,感谢大家的建议。

于 2011-08-01T09:20:21.553 回答
1

如果 beautifulsoup 不能解决您的 html 问题,那么下一个最佳解决方案将是正则表达式。lxml、elementtree、minidom 在解析方面非常严格,实际上他们做得对。

其他提示:

  1. 我通过命令提示符将 html 提供给 lynx 浏览器,然后取出页面/内容的文本版本并使用正则表达式进行解析。

  2. 将 html 转换为文本或将 html 转换为 markdown 会去除所有 html 标签,您将保留文本。这很容易解析。

于 2011-07-29T08:27:41.723 回答