Python 在只需要第一次出现特定标记时解析html的有效方法
我有一个很大的html文档。我正在使用BeautifulSoup解析它,但我希望提取的唯一信息是特定标记的文本(我相信它只出现一次) 文档的格式如下:Python 在只需要第一次出现特定标记时解析html的有效方法,python,beautifulsoup,Python,Beautifulsoup,我有一个很大的html文档。我正在使用BeautifulSoup解析它,但我希望提取的唯一信息是特定标记的文本(我相信它只出现一次) 文档的格式如下: <html> <div class=...> <div class=... <div class="foo"> ... ... 我希望这会比没有SoupStrainer时快很多,但是我只得到了2倍的加速,我希
<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调用解析整个文档,因此非常昂贵。谢谢,这看起来适合我的需要。谢谢,这看起来适合我的需要。