• Python之lxml库学习笔记二


    使用XPath查找文本

    另一个抽取XML树的文本内容是XPath,
    >>> print(html.xpath("string()")) # lxml.etree only!
    TEXTTAIL
    >>> print(html.xpath("//text()")) # lxml.etree only!
    [’TEXT’, ’TAIL’]

    如果经常使用,可以包装成一个方法:

    >>> build_text_list = etree.XPath("//text()") # lxml.etree only!
    >>> print(build_text_list(html))
    [’TEXT’, ’TAIL’]

    也可以通过getparent方法得到父节点

    >>> texts = build_text_list(html)
    >>> print(texts[0])
    TEXT
    >>> parent = texts[0].getparent()
    >>> print(parent.tag)
    body
    >>> print(texts[1])
    TAIL
    >>> print(texts[1].getparent().tag)
    br
    You can also find out if it’s normal text content or tail text:
    >>> print(texts[0].is_text)
    True
    >>> print(texts[1].is_text)
    False
    >>> print(texts[1].is_tail)
    True

     

    树的迭代:

    Elements提供一个树的迭代器可以迭代访问树的元素。

    >>> root = etree.Element("root")
    >>> etree.SubElement(root, "child").text = "Child 1"
    >>> etree.SubElement(root, "child").text = "Child 2"
    >>> etree.SubElement(root, "another").text = "Child 3"
    >>> print(etree.tostring(root, pretty_print=True))
    <root>
    <child>Child 1</child>
    <child>Child 2</child>
    <another>Child 3</another>
    </root>

    >>> for element in root.iter():
    ... print("%s - %s" % (element.tag, element.text))
    root – None
    child - Child 1
    child - Child 2
    another - Child 3

    如果知道感兴趣的tag,可以把tag的名字传给iter方法,起到过滤作用。

    >>> for element in root.iter("child"):
    ... print("%s - %s" % (element.tag, element.text))
    child - Child 1
    child - Child 2

    默认情况下,迭代器得到一个树的所有节点,包括ProcessingInstructions, Comments and Entity的实例。如果想确认只有Elements对象返回,可以把Element factory作为参数传入。

    >>> root.append(etree.Entity("#234"))
    >>> root.append(etree.Comment("some comment"))
    >>> for element in root.iter():
    ... if isinstance(element.tag, basestring):
    ... print("%s - %s" % (element.tag, element.text))
    ... else:
    ... print("SPECIAL: %s - %s" % (element, element.text))
    root - None
    child - Child 1
    child - Child 2
    another - Child 3
    SPECIAL: ê - ê
    SPECIAL: <!--some comment--> - some comment


    >>> for element in root.iter(tag=etree.Element):
    ... print("%s - %s" % (element.tag, element.text))
    root - None
    child - Child 1
    child - Child 2
    another - Child 3
    >>> for element in root.iter(tag=etree.Entity):
    ... print(element.text)
    ê

    作者:Shane
    出处:http://bluescorpio.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    The analysis of China's holding the Olympic Games
    ASP.NET获取客户端的操作系统、浏览器、.NET版本等信息(图)
    ASP.NET 无提示关闭窗口
    VC 使用CryptoAPI计算Hash值:MD5, SHA
    SQL Server 2005 中设置某个用户对某一个数据库有完全控制的权限
    C# 计算文件的MD5值
    VC 获取物理网卡的MAC地址
    哪些免费邮箱不在邮件内容里插广告?
    忆同学
    使用正则表达式获取连接字符串某项的值
  • 原文地址:https://www.cnblogs.com/bluescorpio/p/1748527.html
Copyright © 2020-2023  润新知