gpt4 book ai didi

python - 如何使用 BeautifulSoup 加速解析 10MB 的 HTML 文件

转载 作者:太空狗 更新时间:2023-10-30 02:44:30 28 4
gpt4 key购买 nike

我正在使用 Beautifulsoup 解析 3 到 10MB 之间的大型 HTMl 文件。不幸的是,99% 的数据是我要解析的内容。该文件实际上包含一个小标题、一些 js 脚本以及 1,000 到 10,000 个项目。每个项目由下表行组成:

<tr class="New" id="content_id">
<td class="item" align="center">
</td><td align="center">
<a onclick="somecode"><img src="/images/sample.gif" alt="alttext" class="image"></a>
</td><td style="astyle">[content1]</td><td>[content2]</td><td>[content3]</td><td>[content4]</td><td>[content5]</td><td style="bstyle">[content6]</td><td>[content7]</td><td>[content8]</td><td>[content9]</td><td>[content10]</td><td>[content11]</td><td></td><td>[content12]</td><td>[content13]</td><td>
<a href="somejs">[content14]</a>
</td><td>
<a href="somejs">[content15]</a>
</td><td>[content16]</td><td>
<a title="" href="somejs">[content16]</a>
</td><td>
<a title="" href="somejs">[content17]</a>
</td>
</tr>

注意每个 [content] 占位符都是我需要解析的相关数据。

我尝试了各种常见的优化,例如 a) 使用不同的解析器,b) 使用 SoupStrainer,c) 定义编码

b) 和 c) 在我记录所花费的时间时实际上没有任何效果。不同的解析器会产生重大影响。当我在 1.5k 的项目列表(相对较小的列表)上运行下面的脚本时,我得到以下解析时间(我在 2012 Mac Book Air 上运行实验):

#1653 items parsed in 15.5 seconds with lxml
#xml takes 27 sec
#html5lib takes 69 sec
#html.parser takes 24 sec

current = datetime.datetime.utcnow()
strainer = SoupStrainer('table', attrs={'id':'contenttable'})
soup = BeautifulSoup(html,'lxml',parse_only=strainer,from_encoding="UTF-8")
print datetime.datetime.utcnow() - current

问题:除了我目前使用的方法之外,还有什么可以用来显着缩短解析时间的调整吗?

到目前为止,我只能想到提高 CPU 能力。

最佳答案

假设您首先将整个文件读入内存,那么您无能为力。如果 HTML 在很多地方都被破坏了,那么解析器就必须执行更多的工作来尝试猜测正确的结构。

在 Python 中解析 XML/HTML 时,根据我的经验,lxml 是最快且内存效率最高的(与 xml.minidom 相比) > 或 BeautifulSoup)。

但是,我已经在不到 15 秒的时间内解析了大于 10MB 的简单 XML 文件,所以这让我相信您可能拥有非常讨厌/嵌套过多的 HTML,这正在阻塞解析器。无论是那个还是我的硬件都非常棒(i7 2700k 和 SSD)。

关于python - 如何使用 BeautifulSoup 加速解析 10MB 的 HTML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29157779/

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