爬虫之解析工具---Xpath(三)

12 篇文章 0 订阅
3 篇文章 0 订阅

XPath 是一门在 XML 文档中查找信息的语言。可用来在 XML 文档中对元素和属性进行遍历

话不多说,直接讲技术点。

  1. 技术要点

    1. 选取节点


      列出了一些路径表达式以及表达式的结果,如下:


       
    2. 谓语
      谓语是来查找某个特定的节点或者包含某个指定的值得节点
      谓语被嵌在后面的方括号中

    3. .选取未知节点


       
    4. 选取若干路径

  2. 使用

    1. ​​​​​​​首先我们使用 lxml 的 etree 库,然后利用 etree.HTML 初始化,然后我们将其打印出来
      其中,这里体现了 lxml 的一个非常实用的功能就是自动修正 html 代码,大家应该注意到了,最后一个 li 标签,其实我把尾标签删掉了,是不闭合的。不过,lxml 因为继承了 libxml2 的特性,具有自动修正 HTML 代码的功能。所以输出结果是这样的,不仅补全了 li 标签,还添加了 body,html 标签

      代码:
      from lxml import etree
      text = '''
      <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>
      '''
      html = etree.HTML(text)
      result = etree.tostring(html)
      print(result)
      结果:
      
    2. 获取<li>标签
      代码:
      ··· ···
      html = etree.HTML(text)
      result = etree.tostring(html)
      # print(result)
      obj = html.xpath('//li')
      print(obj)
      print(type(obj))
      结果:
      [<Element li at 0x1510a08>, <Element li at 0x1510a88>, <Element li at 0x1510ac8>, <Element li at 0x1510b08>, <Element li at 0x1510b48>]
      <class 'list'>
      Process finished with exit code 0
    3. 获取<li>标签的所有class
      代码:
      '''
      html = etree.HTML(text)
      result = etree.tostring(html)
      # print(result)
      obj = html.xpath('//li/@class')
      print(obj)
      print(type(obj))
      结果:
      ['item-0', 'item-1', 'item-inactive', 'item-1', 'item-0']
      <class 'list'>
      Process finished with exit code 0
    4. 获取 <li> 标签下 href 为 link1.html 的 <a> 标签
      代码:
      '''
      html = etree.HTML(text)
      result = etree.tostring(html)
      # print(result)
      obj = html.xpath('//li/a/@href')
      print(obj)
      print(type(obj))
      结果:
      ['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']
      <class 'list'>
      Process finished with exit code 0
      
    5. 获取 <li> 标签下的所有 <a> 标签
      代码:
      '''
      html = etree.HTML(text)
      result = etree.tostring(html)
      obj = html.xpath('//li/a')
      print(obj)
      print(type(obj))
      结果:
      [<Element a at 0x1510a08>, <Element a at 0x1510a88>, <Element a at 0x1510ac8>, <Element a at 0x1510b08>, <Element a at 0x1510b48>]
      <class 'list'>
      Process finished with exit code 0
    6. 获取最后一个 <li> 的 <a> 的 href
      代码:
      '''
      html = etree.HTML(text)
      result = etree.tostring(html)
      obj = html.xpath('//li[last()]/a/@href')
      print(obj)
      print(type(obj))
      结果:
      ['link5.html']
      <class 'list'>
      Process finished with exit code 0
      
    7. 获取倒数第二个元素的内容
      代码:
      '''
      html = etree.HTML(text)
      result = etree.tostring(html)
      obj = html.xpath('//li[last()-1]/a')[0].text
      print(obj)
      print(type(obj))
      结果:
      fourth item
      <class 'str'>
      Process finished with exit code 0
      
    8. 获取 li下的class 为 bold 的标签名
      代码:
      '''
      html = etree.HTML(text)
      result = etree.tostring(html)
      obj = html.xpath('//li[@class="item-0"]')
      print(obj)
      print(type(obj))
      结果:
      [<Element li at 0x1520a08>, <Element li at 0x1520a88>]
      <class 'list'>
      Process finished with exit code 0
      
      
      

      xpath 的大部分的技术点都总结了,有不足之处,欢迎来电。。。——————>电话号码是:

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

      不告诉你

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

依剑仗天涯

你的鼓励是我创装的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值