我有一个很大的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倍的提速,我希望它能更快。我认为这样做的原因是,它在过滤时仍必须检查文档中的每个标签是否匹配。我希望它只是停在与之匹配的第一个标签上,而不花时间分析更多文档。
答案 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();
}
}
这只会获取第一个匹配项。