gpt4 book ai didi

python - 仅需要第一次出现特定标记时解析 html 的有效方法

转载 作者:太空宇宙 更新时间:2023-11-03 20:39:22 25 4
gpt4 key购买 nike

我有一个很大的 html 文档。我正在使用 BeautifulSoup 解析它,但我希望提取的唯一信息是特定标签的文本(我相信只出现一次)。

文档格式如下:

    <html>
<div class=...>
<div class=...
<div class="foo">
...
...

目前,我正在使用 SoupStrainer 来过滤仅具有“foo”类的 div 标签。也许我应该使用不同的库,或者也许我误解了 SoupStrainer 正在做什么。

    html = open("file.html", encoding="UTF8").read()
parse_only = SoupStrainer("div", class_="foo")
soup = BeautifulSoup(raw_html, "lxml", parse_only=parse_only)
text = soup.text

我希望这会比没有 SoupStrainer 时快得多,但我只得到了大约 2 倍的加速,而且我希望它更快。我认为这样做的原因是它仍然需要检查文档中的每个标签在过滤时是否匹配。我希望它只是停在匹配的第一个标签处,而不是花时间解析文档的任何内容。

最佳答案

我建议您将lxml库与etree hack一起使用。这就像逐个标签地读取,而不是读取整个文件。这称为事件驱动解析。

请查看此处了解更多信息 https://lxml.de/tutorial.html#event-driven-parsing

和教程在这里: http://boscoh.com/programming/reading-xml-serially.html和这里: https://www.ibm.com/developerworks/xml/library/x-hiperfparse/

这些示例适用于 html,但您也可以使用 lxml 来解析 html。就我而言,我有 1.1GB 文本 xml 文件,浏览整个文件花了我大约 10m。

简单示例:

inputfile = open('file.html')
context = etree.iterparse(inputfile, events=('end',), tag='YOUR_TAG_NAME')

for event, elem in context:
if event == END and elem.tag == 'YOUR_TAG_NAME':
print(elem.text)

关于python - 仅需要第一次出现特定标记时解析 html 的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56952096/

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