zoukankan      html  css  js  c++  java
  • 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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    1081. Rational Sum (20) -最大公约数
    在Debug模式下中断, 在Release模式下跳出当前函数的断言
    net-snmp配置文件详解
    net-snmp5.7.3移植到arm-linux平台
    NET-SNMP开发——日志输出
    SNMP常用数据操作
    40 网络相关函数(八)——live555源码阅读(四)网络
    39 网络相关函数(七)——live555源码阅读(四)网络
    38 网络相关函数(六)——live555源码阅读(四)网络
    37 网络相关函数(五)——live555源码阅读(四)网络
  • 原文地址:https://www.cnblogs.com/bluescorpio/p/1748527.html
Copyright © 2011-2022 走看看