用iterable代替string来美化soup?

2024-04-19 03:22:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用bs4和python3.5解析Wikipedia元数据文件

这适用于从(更大)文件的测试片中提取:

from bs4 import BeautifulSoup

with open ("Wikipedia/test.xml", 'r') as xml_file:
    xml = xml_file.read()

print(BeautifulSoup(xml, 'lxml').select("timestamp"))

问题是元数据文件都是12+gig的,所以与其在ensoupification之前以字符串的形式在整个文件中含糊不清,不如让BeautifulSoup以迭代器的形式读取数据(甚至可以从gzcat读取,以避免数据在未压缩的文件中出现)。你知道吗

然而,我试图把任何东西,而不是一根线导致它窒息。有没有办法让BS以流而不是字符串的形式读取数据?你知道吗


Tags: 文件字符串fromtestimport数据文件withxml
2条回答

你可以给BS一个文件句柄对象。你知道吗

with open("Wikipedia/test.xml", 'r') as xml_file:
    soup = BeautifulSoup(xml_file, 'lxml')

这是Making the Soup文档中的第一个示例

BeautifulSoup或lxml没有stream选项,但是可以使用iterparse()读取块中的大型xml文件

import xml.etree.ElementTree as etree

for event, elem in etree.iterparse("Wikipedia/test.xml", events=('start', 'end')):
  ....
  if event == 'end':
      ....
      elem.clear() # freed memory

阅读更多herehere

相关问题 更多 >