有没有办法从lxml的lxml.etree.iterparse中获取多个标签名称?我有一个类似文件的对象,具有昂贵的读取操作和许多标签,因此获取所有标签或进行两次通过是不理想的。
编辑:它会像Beautiful Soup的find(['tag-1', 'tag-2])
,除了作为iterparse的参数。想象一下,为<td>
和<div>
标签解析HTML页面。
答案 0 :(得分:4)
我知道我已经迟到了,但也许其他人需要帮助解决同样的问题。
此代码将为Tag1
和Tag2
标记生成事件:
etree.iterparse(io.BytesIO(xml), events=('end',), tag=('Tag1', 'Tag2'))
答案 1 :(得分:3)
我不是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
在解析过程中动态生成事件,因此您只需要读取所需数据。但是,在解析过程中,您无法跳过读取元素,因为您不知道要跳过多远。在上文中,我们只是忽略了我们不感兴趣的标签。
您可能已经知道:不要将xml解析器用于html。 编辑 - 事实证明lxml支持html解析,但您应该检查文档以查看程度。