Python 在只需要第一次出现特定标记时解析html的有效方法

Python 在只需要第一次出现特定标记时解析html的有效方法,python,beautifulsoup,Python,Beautifulsoup,我有一个很大的html文档。我正在使用BeautifulSoup解析它,但我希望提取的唯一信息是特定标记的文本(我相信它只出现一次) 文档的格式如下: <html> <div class=...> <div class=... <div class="foo"> ... ... 我希望这会比没有SoupStrainer时快很多,但是我只得到了2倍的加速,我希

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

文档的格式如下:

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

我希望这会比没有SoupStrainer时快很多,但是我只得到了2倍的加速,我希望它能更快。我认为这样做的原因是,它在拉紧文档时仍然必须检查文档中的每个标记是否匹配。我希望它只需在与之匹配的第一个标记处停止,而不用再花时间解析文档。

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

请在这里查看更多信息

和教程: 在这里:

这些示例是针对html的,但您也可以使用lxml解析html。 在我的案例中,我有1.1GB的文本xml文件,查看整个文件花费了我约10万英镑

快速示例:

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)

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

请在这里查看更多信息

和教程: 在这里:

这些示例是针对html的,但您也可以使用lxml解析html。 在我的案例中,我有1.1GB的文本xml文件,查看整个文件花费了我约10万英镑

快速示例:

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)
靓汤的功能应该对你有帮助

html = open("file.html", encoding="UTF8").read()
soup = BeautifulSoup(html)
print(soup.find("div", class_="foo"))
这将只获取第一个匹配项。

Beautiful Soup的函数应该对您有所帮助

html = open("file.html", encoding="UTF8").read()
soup = BeautifulSoup(html)
print(soup.find("div", class_="foo"))

这将只获取第一个匹配项。

如果您的解析任务非常简单,我建议不要使用解析包。只要使用
string.find()
。如果您的解析任务非常简单,我建议您不要使用解析包。只需使用
string.find()。问题是BeautifulSoup调用解析整个文档,因此非常昂贵。对不起,我应该提到-这是我尝试的第一件事。问题是BeautifulSoup调用解析整个文档,因此非常昂贵。谢谢,这看起来适合我的需要。谢谢,这看起来适合我的需要。