有没有办法从 lxml 的 lxml.etree.iterparse 中获取多个标签名称?我有一个类似文件的对象,它具有昂贵的读取操作和许多标签,因此获取所有标签或执行两次传递是次优的。
编辑:它将类似于 Beautiful Soup's find(['tag-1', 'tag-2])
,除了作为 iterparse 的参数。<td>
想象一下为和<div>
标记解析 HTML 页面。
有没有办法从 lxml 的 lxml.etree.iterparse 中获取多个标签名称?我有一个类似文件的对象,它具有昂贵的读取操作和许多标签,因此获取所有标签或执行两次传递是次优的。
编辑:它将类似于 Beautiful Soup's find(['tag-1', 'tag-2])
,除了作为 iterparse 的参数。<td>
想象一下为和<div>
标记解析 HTML 页面。
我知道我玩游戏迟到了,但也许其他人需要帮助解决同样的问题。此代码将为Tag1
和Tag2
标签生成事件:
etree.iterparse(io.BytesIO(xml), events=('end',), tag=('Tag1', 'Tag2'))
我不是 100% 确定您在这里所说的“获取所有标签”是什么意思,但也许这就是您正在寻找的:
for event, elem in iterparse(file_like_object):
if elem.tag == 'td' or elem.tag == 'div':
# reached the end of an interesting tag
print 'found:', elem.tag
# possibly quit early to prevent further parsing
if exit_condition: break
iterparse
在解析过程中动态生成事件,因此您只需读取所需的数据。但是,您无法在解析期间跳过阅读元素,因为您不知道要跳过多远。在上面,我们只是忽略了我们不感兴趣的标签。
您可能已经知道:不要对 html 使用 xml 解析器。编辑- 事实证明 lxml 支持 html 解析,但您应该查看文档以了解程度。