美文网首页
python lxml xpath

python lxml xpath

作者: 山高路陡 | 来源:发表于2020-07-25 12:44 被阅读0次

python lxml与xpath

xpath介绍

  • 基本概念

    • XPath(XML Path Language)是一种XML的查询语言,他能在XML树状结构中寻找节点。XPath 用于在 XML 文档中通过元素和属性进行导航
    • xml是一种标记语法的文本格式,xpath可以方便的定位xml中的元素和其中的属性值。lxml是python中的一个包,这个包中包含了将html文本转成xml对象,和对对象执行xpath的功能
  • 节点关系

    • xml_content = '''
      <bookstore>
      <book>
          <title lang='eng'>Harry Potter</title>
          <author>J K.Rowing</author>
          <year>2005</year>
          <price>29<price>
      </book>
      </bookstore>
      '''
      
    • 上述文本节点关系

      • <bookstore> (文档节点)
      • <author>J k.Rowing</author>(元素节点)
      • leng="en" (属性节点)
    • 父(Parent) book元素时title、author、year、price元素的父

    • 子(Children)title、author、year、price都是book元素的子

    • 同胞(Sibling)title、author、year、price都是同胞

  • 基本使用

    • 表达式 描述
      nodename 选取此节点的所有子节点
      / 从根节点选取
      // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
      . 选取当前节点
      .. 选取当前节点的父节点
      @ 选取属性
    • 查找某个特定节点或者包含某个指定的值的节点

      • 路径表达式 结果
        /bookstore/book[1] 选取bookstore子元素的第一个book元素
        /bookstore/book[last()] 选取bookstore子元素的最后一个book元素
        /bookstore/book[last()-1] 选取bookstore子元素的倒数第二个book元素
        /bookstore/book[position()<3] 选取最前面的两个 属于bookstore元素 的子元素为book元素
        //title[@lang] 选取所有拥有名为lang的属性的title元素
        //title[@lang='eng'] 选取所有title元素,且这些元素拥有值位eng的lang属性
        bookstore/book[price>35.0] 选取bookstore元素的所有book元素,且其中的price元素的值需大于35.0
        通配符 描述
        * 匹配任何元素节点
        @* 匹配任何属性节点
        node() 匹配任何类型的节点
      • 模块的使用

        • 安装 pipi install lxml

        • wb_data = """
                  <div>
                      <ul>
                           <li class="item-0"><a href="link1.html">first item</a></li>
                           <li class="item-1"><a href="link2.html">second item</a></li>
                           <li class="item-inactive"><a href="link3.html">third item</a></li>
                           <li class="item-1"><a href="link4.html">fourth item</a></li>
                           <li class="item-0"><a href="link5.html">fifth item</a>
                       </ul>
                   </div>
                  """
          
        • 使用

        • from lxml import etree

          • etree的作用
          • 第一个时将html字符串转化位element对象
          • 第二个时element对象可以转换位字符串或者二进行制类型
          # 导入包
          import lxml import etree
          # 首先数据需要在网页源码中显示
          def etree_use(web_source):
          # 使用etree处理原始网页数据
              html_element = etree.HTML(web_source)
               # 节点与属性选择
              data_element = html_element.xpath('//div[@class="xxx"]')
              # 通过节点和属性选择数据,
              # 节点 html  body head div ul li p a 等
              # 属性一般是<节点 属性>尖括号中的数据,@class  @color
              # 选择节点中尖括号(<data>)的数据直接-->节点/@属性
              # 选择节点<节点 属性>text</节点>完整的数据使用-->节点[@属性]/text()
          

相关文章

网友评论

      本文标题:python lxml xpath

      本文链接:https://www.haomeiwen.com/subject/coiplktx.html