我有一些随机HTML,我使用BeautifulSoup来解析它,但在大多数情况下(> 70%)它会窒息。我尝试使用Beautiful soup 3.0.8和3.2.0(3.1.0向上有一些问题),但结果几乎相同。
我可以从头脑中回想一下Python中可用的几个HTML解析器选项:
我打算测试所有这些,但我想知道你的测试中哪一个最宽容,甚至可以尝试解析坏的HTML。
答案 0 :(得分: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
答案 1 :(得分:2)
对于不能用于其他任何内容的页面(包含嵌套<form>
元素的页面),我会想到MinimalSoup和ICantBelieveItsBeautifulSoup。每个人都可以处理某些类型的错误,而另一个错误通常你不需要同时尝试这两种错误。
答案 2 :(得分:2)
我最终使用带有html5lib的BeautifulSoup 4.0进行解析,并且更加宽容,对我的代码进行了一些修改,它现在工作得非常好,感谢大家的建议。
答案 3 :(得分:1)
如果beautifulsoup无法解决您的HTML问题,那么下一个最佳解决方案将是正则表达式。 lxml,elementtree,minidom在解析时非常严格,实际上它们做得很好。
其他提示:
我通过命令提示符将html提供给lynx浏览器,并取出页面/内容的文本版本并使用正则表达式进行解析。
将html转换为text或html to markdown剥离所有html标记,您将保留文本。这很容易解析。