python中xpath解析

news2024/11/13 9:37:26

**前言:**今年博客更新的太少了,很多学习计划都因为工作原因延迟了,今年真的身心太疲惫了,终于有点能理解为什么有的同行们会无心学习了,今年同样也是吃老本的一篇博客,所谓好记性不如烂笔头,以前用的再熟的东西都会随着时间慢慢淡化掉。尤其是作为测试人员在面临不同的项目会让你用到不同的技术,在一个项目组待几年以前学过的东西很可能会忘个干净,这时间就体现出笔记的重要性了,哈哈哈,今天废话比较多啊,切入正题把。
学过自动化测试或者爬虫的小伙伴们肯定对xpath再熟悉不过了,xpath呢其实就是在xml中搜索内容的一门语言,也是通用性比较强的一种解析方式。
安装:

pip instl lxml

实现方式:
1、获取页面源代码
2、实列化一个etree对象,将需要解析的页面源代码放到对象中。
3、调用etree对象中的xpath方法结合着xpath表达式实现标签的定位。
xpath表达式:

  • /:表示是从根节点开始定位,表示的是一个层级
  • //:表示的是多个层级。可以表示从任意位置开始定位
  • (‘//div[@class = “dong”]’) 根据属性定位
  • (‘//div[@class = “song”]/p[3]’) 根据索引定位 (索引是从1开始的)
  • (‘//div[@class=“tang”]//li[5]/a/text()’)[0] /text()获取标签中直系的文本 取到标签中的文字,返回的是一个列表所以必须要用列表返回。
    //text()获取标签中所有的文本内容
  • ('//div[@class=“tang”]/li/@tag) 取标签中的属性
    举例实现
    定位该页面所有的项目名称:
    在这里插入图片描述
import requests
from lxml import etree
url = 'https://nanjing.zbj.com/search/service/?kw=saas&r=1&nt=3606&fcn' \
      '=%E7%94%B5%E5%AD%90%E5%95%86%E5%9F%8E%E7%B3%BB%E7%BB%9F'
header = {
    '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'
}
resp = requests.get(url=url, headers=header) # 获取页面源代码
html = etree.HTML(resp.text) # 实列化一个etree对象,将需要解析的页面源代码放到对象中

从根节点开始定位获取项目名称:

devis = html.xpath('//*[@id="__layout"]/div/div[2]/div/div[4]/div[4]/div[1]/div[1]/div/div[3]/div[2]/a/text()') # 使用了多层级组合属性结合单层级的定位方法

print(devis)
# 打印:['微信小程序开发商城定制生鲜配送外卖同城社交婚恋直播考试']

获取某个标签内容:

html = etree.HTML(resp.text)
devis = html.xpath('//*[@id="__layout"]/div/div[2]/div/div[4]/div[4]/div[1]/div[1]/div/@data-trace-id')
print(devis)
# 打印:['f58e8d25-a56a-40c6-8335-cac6633228310001']

获取当前页面所有项目标题
定位所有项目的父标签:
在这里插入图片描述

devis = html.xpath('//*[@id="__layout"]/div/div[2]/div/div[4]/div[4]/div[1]') # 找到项目详情的上级标签并解析
for dev in devis: # 循环上级标签
    n = 1
    for i in range(50):   # 分析页面标签分布,循环得到所有项目名称
        n += 1
        label = dev.xpath('./div[{}]/div/div[2]/div[2]/a/text()'.format(n))
        print(label)

打印:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/60637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中静态域和静态方法的一些梳理

最近发现自己对一些Java中的静态域和静态方法的基础知识掌握的不是特别牢靠,于是针对一些自己之前模棱两可的点,进行书籍的翻阅复习。 参考文献: Java核心技术卷一 静态域 将域定义为static,代表该类的所有实例对象都共享这一个…

[附源码]计算机毕业设计JAVA医药管理系统

[附源码]计算机毕业设计JAVA医药管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis M…

QT5.14.2+cmake3.8.2+opencv3.4.0环境配置遇到的问题

1、cmke的configure时遇到无法下载opencv_ffmpeg.dll等三个文件 我直接用网上的下载好的在文件夹中添加,不过,一定要改成原文件的命名,就是带一堆数字签名的: 然后直接Generate,之后就可以去cmd编译了 (因为再次conf…

RocketMq消息持久化(一)——存储架构设计概述

1.RocketMq 存储概要设计 RocketMQ主要存储的文件包括Comitlog文件、ConsumeQueue文件、IndexFile文件,存储路径为${ROCKET_HOME}/store,默认在当前用户目录下的store目录: store目录下的文件如上所示,分别有:checkpo…

[附源码]计算机毕业设计JAVA医院床位管理系统

[附源码]计算机毕业设计JAVA医院床位管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

Halo搭建个人博客网站

Halo搭建个人博客网站 一、docker部署Halo 目前测试了两种方法安装Halo,第一种是使用Jar包安装:提供JAR包资源,不过因为使用jar包部署需要Java11才可以,我本机使用的是Java8,所以暂时不做调整。第二种是通过docker安装。 1.1 启…

项目实例:H3C端口镜像 (镜像单目的端口 镜像多目的端口)

一、项目实例 某局业务系统三级等保项目:配置只列出端口镜像部分,其他部分及设备(略) 1.1 边界部署两台防火墙做HA高可用 1.2 核心使用两台H3C交换机做堆叠,上联线路分别连接防火墙(主)、防火…

【Python自然语言处理】隐马尔可夫模型中维特比(Viterbi)算法解决商务选择问题实战(附源码 超详细必看)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、统计分词 统计分词基本逻辑是把每个词语看做由单字组成,利用统计学原理计算连接字在不同文本中出现的次数,以此判断相连字属于特定词语的概率。 二、隐马尔可夫模型 当一个随机过程在给定现在状态及所…

计算机组成详解(运算器、控制器、存储器、I/O部件)

文章目录1 概述1.1 计算机组成图2 三大部件2.1 中央处理器 CPU运算器 ALU控制器 CU2.2 内存储器2.3 输入输出设备3 扩展3.1 计算机系统结构图1 概述 1.1 计算机组成图 2 三大部件 2.1 中央处理器 CPU 运算器 ALU 运算器 ALU:Arithmetic Logic Unit,算…

游泳可以戴的耳机有哪些、推荐几款真正能戴着游泳的蓝牙耳机

现在身边很多人也是非常喜欢游泳,尤其是到了夏天的时候,这项运动可以消耗体内多余脂肪,起到很好的强身健体的作用,比其跑步来说有着明显的优势。不过想要转移游泳带来的疲惫,那么在水里面听听激情的音乐是必不可少的&a…

DAY04-网页布局实战常用HTML标签完整盒模型

文章目录网页布局实战一 HTML标签二 布局标签三 文本标签1文字标签2 列表3 图片标签4 超连接5 相对路径与绝对路径四 行和块的区分五 行和块的转换六 标准盒模型外边距内边距边框盒子模式七 案例网页布局实战 一 HTML标签 HTML的标签分为两类: 布局标签&#xff…

springboot中使用Spring Data Jpa

Springboot 中如何集成spring data jpa 一 什么是ORM? ORM即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道&#…

图论期末复习(《图论机器应用》——朴月华)

文章目录一、图的基本概念二、图的连通性三、树四、E 图与 H 图五、对集与独立集六、平面图与网络流一、图的基本概念 1、基本概念2、顶点的度 概念,有关定理及推论(握手定理),度序列的概念及相关结论,根据度序列画图…

【星球】【slam】 研讨会(5)VINS:Mono+Fusion 重点提炼

VINSFusion重点梳理 A重点梳理和回顾 1传感器前端 视觉前端 特征点提取 opencv接口 goodfeaturestotrack 光流追踪 opencv接口 calcOptical 异常点剔除 光流剔除的异常点 本质矩阵的校验(不符合本质矩阵的点筛除) 特征点去畸变 “逐渐逼近式”的计算方式 特征点性质的计算 IM…

常用算法-Java

基础概念 程序 数据结构 算法 算法特性:输入、输出、有穷性、确定性、可靠性 算法目标:正确性、可读性、健壮性、运行时间少、内存空间小 时间复杂度 时间复杂度是用来估计算法运行时间的一个单位。 一般来说,时间复杂度高的算法比时…

【高并发基础】理解 MVCC 及提炼实现思想

文章目录1. 前言2. MVCC 概念2.1 MVCC 版本链2.2 MVCC trx_id2.3 MVCC Read View3. 提出问题4. 解决问题4.1 不读未提交的数据4.1.1 一般的并发情况4.1.2 特殊的并发情况4.1.3 剩下的并发情况4.2 如果自己修改了数据,要第一时间读到5. MySQL RC 使用 MVCC5.1 MVCC D…

Git使用学习记录(一、前置知识)

Git使用学习记录(一、前置知识) Git简介 Git 是什么? Git 是目前为止最为先进的分布式版本控制系统(分布式版本控制系统没有“中央服务器”,每个⼈的电脑上都是⼀个完整的版本库,⼯作时不需要联网&#xff…

Dynamics 365 Environment Variables(环境变量)的应用

环境变量这个功能很早就有了,但最近才关注到,是个不错的功能,所以写篇介绍下它的应用。 项目里都会有配置实体这么个东西,用于存储各种常量或者与其他系统集成时的各种配置参数,以往我们都是自定义一个实体用来存放&am…

PyTorch 2.0发布了,一行代码提速76%

PyTorch 官方:我们这次的新特性太好用了,所以就直接叫 2.0 了。 前段时间,PyTorch 团队在官方博客宣布 Pytorch 1.13 发布,包含 BetterTransformer 稳定版等多项更新。在体验新特性的同时,不少人也在期待下一个版本的推…

Mysql进阶学习(十)存储过程和函数流程控制结构

Mysql进阶学习(十)存储过程和函数&流程控制结构存储过程和函数1. 存储过程1.1 创建语法1.2 调用语法1.3 删除存储过程1.4 查看存储过程的信息2. 函数2.1 创建语法2.2 调用语法2.3 查看函数2.4 删除函数3. 存储过程/函数案例4. 流程控制结构4.1. 分支…