beautifulsoup html文件,如何使用BeautifulSoup加速解析10MB的HTML文件

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

alttext

[content1][content2][content3][content4][content5][content6][content7][content8][content9][content10][content11][content12][content13]

[content14]

[content15]

[content16]

[content16]

[content17]

请注意,每个[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,parsing,lxml,beautifulsoup,performance

来源: https://codeday.me/bug/20190609/1205543.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值