• 爬虫-Day6-xpath解析


    爬虫-Day6-xpath解析

    • 1.什么是Xpath(xml path 语言) - 专门用来解析xml数据

      • 不同的编程语言的程序如果想要进行数据交流,数据传输之前必须转换成通用的数据格式(常用的有两种:json、xml)
      • Xpath解析数据的原理:通过提供你需要的标签在整个网页(xml)中的路径,来找到对应的标签,进一步获取标签内容或者标签属性。
      • python基于xpath做数据解析的工具:lxml第三方库
    • 2.xml数据 - 一种通用的数据格式

      xml数据是以标签(元素)为单位,通过标签内容或者标签属性来提供数据。

      xml语法:<标签名 属性名1=属性值1 属性名2=属性值2 …>标签内容</标签名>

    • 3.xpath常用术语

      树: 树结构(一个网页源代码,一个xml数据本质就是一个树结构)
      节点: 本质就是标签
      根节点: 最外层的哪个标签
      节点内容: 双标签标签内容
      节点属性: 标签属性

    • 4.xpath语法

      • 1.基于html数据或xml数据创建html或者xml对应的树并且获取根节点

        # etree.HTML(网页源代码)、etree.XML(xml数据)
        f = open('files/超市.xml', encoding='utf-8')
        root = etree.XML(f.read())
        f.close()
        
        response = request.get(url)
        root = etree.HTML(response.text)
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      • 2.基于节点通过路径获取标签

        路径写法:
        1.绝对路径: /路径 (路径必须从根节点开始往后写)
        2.相对路径:./路径 (.表示当前节点; 谁去点的xpath,当前节点就是谁)
        …/路径 (…表示当前节点的上层节点)
        注意:如果路径是以 ‘./’ 开始的,‘./’ 可以省略
        3.任意路径://路径

        注意:绝对路径和任意路径,在写路径和获取标签的时候跟xpath前面是哪个标签没有任何关系

            ```python
            # 练习:获取所有商品的商品名对应的标签
            绝对路径
            result = root.xpath('/supermarket/all_goods/goods/name')
            相对路径
            all_goods = root.xpath('./all_goods')[0]
            result = all_goods.xpath('./goods/name')
            任意路径
            result = all_goods.xpath('//name')
            ```
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
      • 4.获取标签内容和标签属性

        • 获取标签内容:获取标签的路径/text()

          result = root.xpath(‘//goods/name/text()’)

        • 获取标签属性值:获取标签的路径/@属性名

          result = root.xpath(‘//staff/@position’)

      • 5.谓语(条件)

        • 1.位置相关谓语

          [N] - 第N个标签(N是任意正整数)
          [last()] - 获取最后一个标签
          [last()-1] - 获取倒数第2个标签。这儿的1可以是其他任意的整数
          [position()>N]、 [position()>=N]、[position()<N]、[position()<=N]

          result = root.xpath('//goods[1]/name/text()')  第一
          result = root.xpath('//goods[last()]/name/text()')  倒数第一
          result = root.xpath('//goods[last()-1]/name/text()')  倒数第二
          result = root.xpath('//goods[position()<=3]/name/text()') 第三及以后
          
          • 1
          • 2
          • 3
          • 4
        • 2.属性相关谓语

          [@属性名=值] - 获取指定属性为指定值的标签
          [@属性名] - 获取拥有指定属性的标签

          result = root.xpath('//goods[@class="c3"]/name/text()')
          result = root.xpath('//goods[@class]/name/text()')
          
          • 1
          • 2
        • 3.子标签内容相关谓语

          [子标签名>值]、[子标签名>=值]、[子标签名<值]、[子标签名<=值]、[子标签名=值]

          result = root.xpath('//goods[pirce=1.5]/name/text()')
          
          • 1
      • 6.分支

        路径1|路径2 - 获取的是多个路径中所有有效路径的结果

        result = root.xpath('//goods/name/text()|//staffs/staff/text()')
        
        • 1
      • 7.通配符

        xpath中可以用*来代表任意标签或者任意属性

        获取good所有子项标签
        result = root.xpath('//goods/*/text()')
        获取所有@class="c2"的标签
        result = root.xpath('//*[@class="c2"]')
        获取第一个staff下所有的属性
        result = root.xpath('//staff[1]/@*')
        获取所为"c2"的标签
        result = root.xpath('//*[@*="c2"]')
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
  • 相关阅读:
    Java 解析 cURL(bash) 命令
    可循环视频播放器丨VideoPlayer丨StreamingAssets加载
    Postman进阶篇(九)-动态变量(Dynamic variables)随机生成参数
    细说智能家居新标准-Matter,蓝牙在智能家居中发挥的作用
    ATX Power Supply
    区间信息维护与查询【线段树 】 - 原理2 线段树中的“懒操作”
    图像处理之边缘检测[微分算子、Canny算子和LOG算子]
    【ROS系统】Ubuntu22.04系统中安装ROS2系统_ubuntu 安装ros2_GoesM
    详解单例模式+代码实现
    面向对象基础(二)
  • 原文地址:https://blog.csdn.net/flank555/article/details/125507045