我正在处理需要快速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或至少一个解决方法(利用当前已知解析器的部分)?非常感谢!
答案 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")
库来显着加快编码检测速度。
正如我所看到的,Chrome和Firefox等现代浏览器可以非常快速地解析HTML并且能够很好地处理损坏的HTML。
我知道这是一个巨大的开销,但只是为您的选项添加一些内容 - 您可以通过selenium
启动cchardet
,导航到所需的地址(或打开本地html文件)并从Chrome
:
.page_source
另见: