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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    解决eclipse自动格式化影响svn提交的问题
    XShell下载安装并连接阿里云
    阿里云服务器购买选择
    三线程循环打印ABC流程解释
    eclipse个人开发较常用的快捷键
    eclipse调试的一些技巧
    Java序列化与反序列化
    vmware vsphere添加磁盘,不重启检测
    win10国内生态-恶心的经历
    本地win10 vmware 虚拟机centos7系统初始化网络配置
  • 原文地址:https://www.cnblogs.com/bluescorpio/p/1748527.html
Copyright © 2011-2022 走看看