lxml的iterparse中有多个标签名称?

时间:2010-08-19 17:25:44

标签: python lxml elementtree

有没有办法从lxml的lxml.etree.iterparse中获取多个标签名称?我有一个类似文件的对象,具有昂贵的读取操作和许多标签,因此获取所有标签或进行两次通过是不理想的。

编辑:它会像Beautiful Soup的find(['tag-1', 'tag-2]),除了作为iterparse的参数。想象一下,为<td><div>标签解析HTML页面。

2 个答案:

答案 0 :(得分:4)

我知道我已经迟到了,但也许其他人需要帮助解决同样的问题。 此代码将为Tag1Tag2标记生成事件:

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解析,但您应该检查文档以查看程度。