仅在第一次出现特定标签时解析html的有效方法

时间:2019-07-09 11:58:49

标签: python beautifulsoup

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

文档的格式如下:

Name, Created date, Status,  Deleted date
xxx,  2019-01-01,   Active,  NULL
xxx,  2018-01-01,   Active,  NULL
xxx,  2018-01-01,   Deleted, 2019-02-01
xxx,  2019-01-01,   Deleted, 2018-02-01

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

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

我希望这会比没有SoupStrainer时快得多,但是我只能得到2倍的提速,我希望它能更快。我认为这样做的原因是,它在过滤时仍必须检查文档中的每个标签是否匹配。我希望它只是停在与之匹配的第一个标签上,而不花时间分析更多文档。

2 个答案:

答案 0 :(得分:0)

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

请在此处查看更多信息,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。

简单示例:

etree

答案 1 :(得分:0)

Beautiful Soup的find函数应该可以为您提供帮助。

public class MyClassTest {

    @Test public void getVersion() {
       MyClass myClass = new MyClass();
    }
}

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