• Xpath使用方法


    目录

    一、安装

    二、xpath基本语法

     2.1、依赖

     2.2、xpath语法

    2.3、实例

     2.3.1、html文件

     2.3.2、python

    三、获取百度网站首页的“百度一下”

     3.1、步骤

     3.2、注意


    一、安装

     1)安装xpath插件

     2)在chrome中安装xpath插件

     3)将xpath拖入即可

     4)验证xpath

            1》点击 ctrl + shift + x 出现小黑框,即代表安装成功

            2》再次点击 ctrl + shift + x 即可关闭小黑框

    二、xpath基本语法

     2.1、依赖

      1)安装 lxml 库

      2)导入 lxml.etree

      3)解析 html 文件

    1. # xpath解析
    2. 1)本地文件 etree.parse
    3. 2)服务器响应的数据 response.read().decode('utf8') etree.HTML()

      4)获取特定组件内容

    tree.xpath('xpath路径')

     2.2、xpath语法

      1、路径查询

            //:查找所有子孙节点,不考虑层级关系

            /:找直接子节点

      2、谓词查询

            //div[@id]

            //div[@id="maincontent"]

      3、属性查询

            //@class

      4、模糊查询

            //div[contains(@id, "he")]

            //div[starts-with(@id, "he")]

      5、内容查询

            //div/h1/text()

      6、逻辑运算

            //div[@id="head" and @class="s_down"]

            //title | //price

    2.3、实例

     2.3.1、html文件

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8"/>
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <ul>
    9. <li id="l1" class="c1">北京li>
    10. <li id="l2">上海li>
    11. <li>深圳li>
    12. <li>武汉li>
    13. ul>
    14. <ul>
    15. <li>大连li>
    16. <li>锦州li>
    17. <li>沈阳li>
    18. ul>
    19. body>
    20. html>

     2.3.2、python

    1. from lxml import etree
    2. # xpath解析
    3. # (1)本地文件 etree.parse
    4. # (2)服务器响应的数据 response.read().decode('utf8') etree.HTML()
    5. # xpath解析本地文件
    6. tree = etree.parse("17_xpath基本使用.html")
    7. # tree.xpath('xpath路径')
    8. # 查找ul下面的li
    9. li_list= tree.xpath('//body//ul/li')
    10. # 查找所有有id属性的li标签
    11. # text()获取标签中的内容
    12. li_list1 = tree.xpath('//ul/li[@id]/text()')
    13. # 查找id为l1的li标签,注意“引号”的问题
    14. li_list2 = tree.xpath('//ul/li[@id="l1"]/text()')
    15. # 查找到id为l1的li标签的class的属性值
    16. li1 = tree.xpath('//ul/li[@id="l1"]/@class')
    17. # 查询id中包含l的li标签
    18. li2 = tree.xpath('//ul/li[contains(@id,"l")]/text()')
    19. # 查询id的值以l开头的li标签
    20. li3 = tree.xpath('//ul/li[starts-with(@id,"l")]/text()')
    21. # 查询id为l1和class为c1的标签
    22. li4 = tree.xpath('//ul/li[@id="l1" and @class="c1"]/text()')
    23. # 查询id为l1或id为l2的标签(只能通过标签获取而不是属性)
    24. li = tree.xpath('//ul/li[@id="l1"]/text() | //ul/li[@id="l2"]/text()')
    25. # 判断列表的长度
    26. print(li)
    27. print(len(li))

    三、获取百度网站首页的“百度一下

     3.1、步骤

     1)根据网页源码,编写xpath路径

     2)编写代码

    1. from lxml import etree
    2. import urllib.request
    3. # (1)获取网页源码
    4. # (2)解析服务器响应的数据 response.read().decode('utf8') etree.HTML()
    5. # (3)打印
    6. url = "https://www.baidu.com/"
    7. headers = {
    8. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    9. }
    10. # 请求对象的定制
    11. request = urllib.request.Request(url=url, headers=headers)
    12. # 模拟浏览器访问服务器
    13. response = urllib.request.urlopen(request)
    14. # 获取网页源码
    15. content = response.read().decode("utf8")
    16. # 解析网页源码,获取想要的数据
    17. tree = etree.HTML(content)
    18. # 获取想要的数据 xpath的返回值是一个列表类型的数据
    19. result = tree.xpath('//input[@id="su"]/@value')[0]
    20. print(result)

     3.2、注意

            爬取到的html可能和浏览器解析的html不一样,故存在浏览器xpath_helper可以获取到,而代码获取不到的情况,需要查看爬取到的源码:

  • 相关阅读:
    Java Stream流的使用
    你以为搞个流水线每天跑,团队就在使用CI/CD实践了?
    设计模式之(12)——外观模式
    模拟vue动态路由
    Linux内存管理(十):备选区域初始化
    Qt Designer UI设计布局小结
    COMP3511 Spring 2022
    axios拦截器是什么?(请求拦截器、相应拦截器),作用?挂载请求头携带token、权限验证等
    msvcr120.dll缺失怎么修复,快速修复msvcr120.dll丢失的三个有效方法
    稳定好用的短连接生成平台,支持API批量生成
  • 原文地址:https://blog.csdn.net/weixin_44302046/article/details/126715462