gpt4 book ai didi

html - 快速有效地解析损坏的 HTML 的方法?

转载 作者:行者123 更新时间:2023-11-27 23:35:54 24 4
gpt4 key购买 nike

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

目前 lxml 是我的选择,我知道它也为 libxml2 的恢复模式提供了一个接口(interface),但我对结果并不是很满意。对于某些特定的 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 导出的独立存储库以便我可以使用它们,但还没有找到类似的东西。

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

最佳答案

BeautifulSoup 确实很好地使损坏的 HTML soup 变得漂亮。您可以通过 letting it use lxml.html under the hood 加快解析速度:

If you’re not using lxml as the underlying parser, my advice is to start. Beautiful Soup parses documents significantly faster using lxml than using html.parser or html5lib.

soup = BeautifulSoup(html, "lxml")

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

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

You can speed up encoding detection significantly by installing the cchardet library.

Documentation reference.


As I see, modern browsers like Chrome and Firefox parse HTML very quickly and handle broken HTML really well.

我知道这是一个巨大的开销,但只是为了向您的选项添加一些东西 - 您可以通过 selenium 启动 Chrome ,导航到所需的地址(或打开本地 html 文件)并将 HTML 从 .page_source 转储回来:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("url")

# may be a delay or an explicit wait would be needed here

print(driver.page_source)

driver.close()

另见:

关于html - 快速有效地解析损坏的 HTML 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33771317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com