快速有效地解析破碎的HTML?

时间:2015-11-18 03:28:02

标签: html beautifulsoup html-parsing lxml libxml2

我正在处理需要快速HTML解析的大型项目,包括恢复损坏的HTML页面。

目前lxml是我的选择,我知道它也为libxml2的恢复模式提供了一个界面,但我对结果并不满意。对于某些特定的HTML页面,我发现BeautifulSoup可以产生更好的结果(例如:http://fortune.com/2015/11/10/vw-scandal-volkswagen-gift-cards/,这个标签有一个损坏的<header>标签,lxml / libxml2无法纠正。然而,问题是BS非常慢。

正如我所看到的,Chrome和Firefox等现代浏览器可以非常快速地解析HTML并且能够很好地处理损坏的HTML。与lxml一样,Chrome的解析器构建在libxml2和libxslt之上,但具有更有效的破解HTML处理算法。我希望将有从Chromium导出的独立repos,以便我可以使用它们,但还没有找到类似的东西。

有没有人知道一个好的lib或至少一个解决方法(利用当前已知解析器的部分)?非常感谢!

1 个答案:

答案 0 :(得分:2)

JFrame gameFrame = new JFrame("Game Time!"); JPanel gamePanel = new JPanel(new GridLayout(4,4)); for(int i=0; i<4; i++) { for(int j=0; j<4; j++) { JButton button = new JButton(); button.setBackground(Color.RED); button.setContentAreaFilled(false); button.setOpaque(true); gamePanel.add(button,i,j); } } 做得非常出色,让破烂的HTML汤变得美丽。您可以通过letting it use lxml.html under the hood更快地解析:

  

如果你没有使用lxml作为底层解析器,我的建议是开始。美丽的汤使用lxml比使用html.parser或html5lib更快地解析文档。

BeautifulSoup

另一个优化可能是SoupStrainer - 只解析HTML文档的所需部分,但我不确定它是否适用于您的用例。

您还可以通过安装cchardet library来加快速度:

  

您可以通过安装soup = BeautifulSoup(html, "lxml") 库来显着加快编码检测速度。

Documentation reference.

  

正如我所看到的,Chrome和Firefox等现代浏览器可以非常快速地解析HTML并且能够很好地处理损坏的HTML。

我知道这是一个巨大的开销,但只是为您的选项添加一些内容 - 您可以通过selenium启动cchardet,导航到所需的地址(或打开本地html文件)并从Chrome

转发HTML
.page_source

另见:

相关问题