XPath:是一种用于在XML或HTML文档中定位元素的语言。XPath使用路径表达式来选取节点或节点集。在python中,可以使用lxml库来解析。
XPath解析,只适用于数据在网页源码(document请求)中;如果数据是json格式,或网页源码中没有数据,则无法使用XPath。
  1. 语法:
    • / : 从根节点开始选择。
    • //:选择匹配选择的任何位置的节点。
    • . : 选择当前节点。
    • .. : 当前节点的父节点
    • @ : 选择属性
      str ="""
      <div>
          <ul>
              <li class="item-0"><a href="link1.html"text="shadjfhjisdf">first item</a></li>
              <li class="item-1"><a href="link2.html">second item</a></li>
              <li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
              <li class="item-1"><a href="link4.html" class="test">fourth item</a></li>
              <li aaa="余安" class="item-0"><a class="test" href="link5.html">fifth item</a></li>
          </ul>
      </div>
      """
      
      from lxml import etree
      tree = etree.HTML(str)            
      print(tree.xpath('//li'))         # 返回Element对象
      print(tree.xpath('//li/@class'))  # 匹配所有li的class属性值
      print(tree.xpath('//li/@aaa'))    # 匹配所有li的aaa属性值
      print(tree.xpath('//li//a'))      # 匹配所有的a标签
      print(tree.xpath('//li/a'))       # 匹配所有的a标签
      print(tree.xpath('//a'))          # 匹配所有的a标签
      print(tree.xpath('//ul/li/a'))    # 匹配 ul下li下的a标签
      print(tree.xpath('//li/a[@href="link4.html"]'))     # 匹配 href="link4.html"的a标签
      print(tree.xpath('//li/a[@class="test"]'))
      print(tree.xpath('//span'))
      print(tree.xpath('//a/span'))
      print(tree.xpath('//li//span'))   # 获取子元素 多层用
      print(tree.xpath('//li/a//@class'))  # li下的a标签自己和之下所有的class属性值
      print(tree.xpath('//li/a/@class'))   # li下的a标签的class属性值
      print(tree.xpath('//li/a[@href="link5.html"]/text()'))  # text() 获取内容
      print(tree.xpath('//li[last()]/a/@href'))    # last()最后一个 ['link5.html']
      print(tree.xpath('//li[last()-1]/a/@href'))  # last()-1 倒数第二 ['link4.html']
      print(tree.xpath('//li[1]/a/@href'))         # xpath里面 索引从1开始 ['link1.html']
      print(tree.xpath('//*[@class="bold"]'))      # * 表示所有任意 通配符

更多推荐