python数据解析xpath
- 前言
- 一、安装?
- 二、使用步骤
- 1.基本使用
- **【2】谓语(Predicates)**
- 案例
前言
xpath在Python的爬虫学习中,起着举足轻重的地位,对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但xpath明显比re具有优势,在网页分析上使re退居二线。
提示:以下是本篇文章正文内容,下面案例可供参考
一、安装?
pip install lxml
二、使用步骤
1.基本使用
from lxml import etree
selector=etree.HTML(源码) #将源码转化为能被XPath匹配的格式
selector.xpath(表达式) #返回为一列表
| 表达式 | 描述 | 实例 | 解析 |
|---|---|---|---|
| / | 从根节点选取 | /body/div[1] | 选取根结点下的body下的第一个div标签 |
| // | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置 | //a | 选取文档中所有的a标签 |
| ./ | 当前节点再次进行xpath | ./a | 选取当前节点下的所有a标签 |
| @ | 选取属性 | //@calss | 选取所有的class属性 |
【2】谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点。
谓语被嵌在方括号中。
在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| /ul/li[1] | 选取属于 ul子元素的第一个 li元素。 |
| /ul/li[last()] | 选取属于 ul子元素的最后一个 li元素。 |
| /ul/li[last()-1] | 选取属于 ul子元素的倒数第二个 li元素。 |
| //ul/li[position()❤️] | 选取最前面的两个属于 ul元素的子元素的 li元素。 |
| //a[@title] | 选取所有拥有名为 title的属性的 a元素。 |
| //a[@title=‘xx’] | 选取所有 a元素,且这些元素拥有值为 xx的 title属性。 |
//a[@title>10] > < >= <= != | 选取 a元素的所有 title元素,且其中的 title元素的值须大于 10。 |
| /body/div[@price>35.00] | 选取body下price元素值大于35的div节点 |
实例
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| /ul/* | 选取 bookstore 元素的所有子元素。 |
| //* | 选取文档中的所有元素。 |
| //title[@*] | 选取所有带有属性的 title 元素。 |
| //node() | 获取所有节点 |
| 路径表达式 | 结果 |
|---|---|
| //book/title | //book/price | 选取 book 元素的所有 title 和 price 元素。 |
| //title | //price | 选取文档中的所有 title 和 price 元素。 |
| /bookstore/book/title | //price | 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。 |
-
模糊查询
//div[contains(@id, "he")] # 查询所有id属性中包含he的div标签 //div[starts-with(@id, "he")] # 查询所有id属性中包以he开头的div标签 //div/h1/text() # 查找所有div标签下的直接子节点h1的内容 //div/a/@href # 获取a里面的href属性值 //* #获取所有 //*[@class="xx"] #获取所有class为xx的标签# 获取节点内容转换成字符串 c = tree.xpath('//li/a')[0] result=etree.tostring(c, encoding='utf-8') print(result.decode('UTF-8'))
案例
豆瓣Top250基于xpath解析:
import requests
from lxml import etreeurl = "https://movie.douban.com/top250?start=0"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36"
}
resp = requests.get(url, headers=headers)tree = etree.HTML(resp.text) # 加载页面源代码items = tree.xpath('//li/div[@class="item"]/div[@class="info"]')for item in items:title = item.xpath('./div[@class="hd"]/a/span[1]/text()')[0]rating_num = item.xpath('./div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()')[0]comment_num = item.xpath('./div[@class="bd"]/div[@class="star"]/span[4]/text()')[0]print(title, rating_num, comment_num)相关文章:
python数据解析xpath
前言一、安装?二、使用步骤1.基本使用**【2】谓语(Predicates)**案例 前言 xpath在Python的爬虫学习中,起着举足轻重的地位,对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但xp…...
工业镜头常用参数之实效F(Fno.)和像圈
Fno. 工业镜头中常用到的参数F,有时候用F/#,Fno.来表示,指的是镜头通光能力的参数。它可用镜头焦距及入瞳直径来表示,也可通过镜头数值孔径(NA)和光学放大倍率(β)来计算。有效Fno.…...
what is apache?
Apache 通常指 Apache Software Foundation (ASF) 或 Apache HTTP Server,两者都是计算机软件领域的重要实体。 Apache 软件基金会 (ASF):Apache 软件基金会是一个开发开源软件项目的非营利组织。它为涵盖软件开发各个方面的广泛项目提供支持,…...
【二叉树】Leetcode 94. 二叉树的中序遍历【简单】
二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 解题思路 中序遍历是一种二叉树遍历方式,按照“左根右”的顺序遍历二叉树节点。 1、递归…...
Linux进程控制(等待)
进程等待 为什么要进行进程等待 进程等待是什么? 怎么进行进程等待? 回到我们之前进程状态的代码, 我们知道, 在这段代码中,父进程对子进程没有做任何的操作, 所以当子进程在退出后, 会一直处于…...
结构体-C语言
目录 前言 一、定义结构 结构体变量的创建和初始化 二、结构的特殊声明 特别注意: 结构的⾃引⽤ 三、结构体内存对⻬ 对⻬规则 优化结构体 #pragma 结构体传参 四、结构体实现位段 位段的内存分配 位段的跨平台问题 前言 C 数组允许定义可存储相同类…...
Unity DOTS中的baking(四)blob assets
Unity DOTS中的baking(四)blob assets blob assets表示不可变的二进制数据,在运行时也不会发生更改。由于blob assets是只读的,这意味着可以安全地并行访问它们。此外,blob assets仅限于使用非托管类型,这意…...
第三十天-Flask模板 Jinja2
目录 1.什么是模板 2.模板引擎Jinja2 默认配置 全局对象 全局函数 上下文处理器 3.模板中变量的使用 4.模板标签 条件判断if else for循环 添加注释 设置变量 转义显示 5.过滤器 过滤器使用 自定义过滤器 6.全局函数 7.模板中的宏 模板的基础 包含语法 8.…...
在项目中数据库如何优化?【MySQL主从复制(创建一个从节点复制备份数据)】【数据库读写分离ShardingJDBC(主库写,从库读)】
MySQL主从复制 MySQL主从复制介绍MySQL复制过程分成三步:1). MySQL master 将数据变更写入二进制日志( binary log)2). slave将master的binary log拷贝到它的中继日志(relay log)3). slave重做中继日志中的事件,将数据变更反映它自…...
Fragment 与 ViewPager的联合应用(2)
5.创建底部布局bottom_layout <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"horizontal"android:layout_width"match_parent"android:layout_height"55dp"android:background&qu…...
OriginBot智能机器人开源套件
详情可参见:OriginBot智能机器人开源套件——支持ROS2/TogetherROS,算力强劲,配套古月居定制课程 (guyuehome.com) OriginBot智能机器人开源套件 最新消息:OriginBot V2.1.0版本正式发布,新增车牌识别,点击…...
Java Web-Maven
Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具 Maven的作用 1.依赖管理:方便快捷的管理项目依赖资源(jar包),避免版本冲突问题 我们有的项目需要大量的jar包,采用手动导包的方式非常繁琐,并且版本升级也…...
.Net 异步委托
委托的 BeginInvoke 方法和 EndInvoke 方法可以实现异步执行委托方法。这允许委托的方法在后台线程中执行,而不会阻塞当前线程。小编在之前的webform开发中遇到下载进度条卡死的问题就是用它解决的。 案例: namespace ConsoleApplication1 {class Progr…...
web前端面试题---->HTML、CSS
一.居中方法 block元素如何居中 margin:0 auto;position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);flex布局: 对父元素操作 : justify-content:center; al…...
移动端Web笔记day03
移动 Web 第三题 01-移动 Web 基础 谷歌模拟器 模拟移动设备,方便查看页面效果,移动端的效果是当手机屏幕发生了变化,页面和页面中的元素也要跟着等比例变化。 屏幕分辨率 分类: 硬件分辨路 -> 物理分辨率:硬件…...
c++的学习之路:3、入门(2)
一、引用 1、引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。 怎么说呢,简单点理解就是你的小名,家里人叫你小名&#…...
面试经典150题【91-100】
文章目录 面试经典150题【91-100】70.爬楼梯198.打家劫舍139.单词拆分322.零钱兑换300.递增最长子序列77.组合46.全排列39.组合总和(※)22.括号生成79.单词搜索 面试经典150题【91-100】 五道一维dp题五道回溯题。 70.爬楼梯 从递归到动态规划 public …...
在 nginx 中使用 JavaScript
前些日子尝试了在 nginx 中写 JavaScript 的效果。考虑到 JavaScript 作为编程语言不是强需求,在nginx生态上还是 lua 独大,并且还有 openresty 这样一直强力输血,大部分应用场景都能找到参考的解决方案。 插件生态来说,github 上…...
【pytorch】安装合集
使用conda或者pip安装的指令 https://pytorch.org/get-started/previous-versions/ 测试pytorch_gpu是否可用的代码 # 测试pytorch是否安装成功 import torch print(torch.__version__) print(torch.cuda.is_available())...
【教程】PLSQL查看表属性乱码解决方法
一、前言 PL/SQL是Oracle数据库的编程语言,用于编写存储过程、触发器、函数等。 今天用plsql想查看表的属性,看看各个字段的注释,可是打开一看,居然是乱码的,如下面这样 如果在使用PL/SQL查看表属性时出现乱码&…...
混合精度递归Cholesky分解:算法优化与硬件加速实践
1. 混合精度递归Cholesky分解的技术背景在科学计算领域,对称正定(SPD)线性系统的求解是一个基础而关键的问题。这类问题广泛存在于计算流体动力学、气候建模、金融风险分析等实际应用中。以气候建模为例,全球大气环流模型需要求解的线性系统矩阵规模可达…...
在自动化客服系统中集成多模型API以提升回答稳定性与成本可控性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在自动化客服系统中集成多模型API以提升回答稳定性与成本可控性 对于需要7x24小时稳定运行的智能客服系统而言,单一模型…...
unplugin-dts完整指南:从vite-plugin-dts迁移到通用插件
unplugin-dts完整指南:从vite-plugin-dts迁移到通用插件 【免费下载链接】unplugin-dts An unplugin for generating declaration (dts) files. 项目地址: https://gitcode.com/gh_mirrors/vi/unplugin-dts unplugin-dts是一款功能强大的通用插件,…...
为Claude Code配置Taotoken密钥与模型解决访问限制
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为Claude Code配置Taotoken密钥与模型解决访问限制 Claude Code 作为一款高效的编程助手,其原生服务有时会因地域或配额…...
AI动态认知地图:从Llama 4传闻到MCIP验证的闭环实践
1. 这不是一份普通 newsletter:它是一张AI领域的动态认知地图“This AI newsletter is all you need #91”——光看标题,你可能以为这只是又一份堆砌链接的AI资讯合集。但作为连续追踪该系列超过两年、亲手拆解过前87期原始内容、并用其指导过6个真实AI产…...
Uptane OTA入门(3):Primary 与 Secondary ECU——汽车里的更新“主从“架构
一、一辆汽车里有多少个"电脑"? 现代汽车早已不是简单的机械装置,而是一个移动的计算中心。 惊人的数字车型级别ECU 数量代码行数经济型轿车30-50 个1 亿行中高端轿车50-80 个1.5 亿行豪华/电动车80-150 个2 亿行对比:一架波音 787…...
3步掌握Sabaki围棋软件:从新手到高手的完整指南
3步掌握Sabaki围棋软件:从新手到高手的完整指南 【免费下载链接】Sabaki An elegant Go board and SGF editor for a more civilized age. 项目地址: https://gitcode.com/gh_mirrors/sa/Sabaki 在围棋的智慧世界里,一款优秀的软件能让您的学习和…...
用动态主题建模挖掘科学文献中的真实研究趋势
1. 项目概述:用主题建模“听懂”科学文献的集体心跳 你有没有翻过arXiv上每天新增的上千篇机器学习论文,却越看越迷糊——到底哪类研究正在真正升温?不是靠刷标题、不是靠猜作者名气,而是让成千上万篇论文自己“开口说话”&#x…...
Keil编译器数据类型详解与嵌入式开发实践
1. 变量范围查询指南:Keil编译器数据类型详解 作为一名嵌入式开发老手,我深知在Keil环境下编程时,准确掌握各种数据类型的取值范围是多么重要。今天就来系统梳理C51/C166/C251编译器中的数据类型范围问题,这些经验都是我在实际项目…...
学术创作提质增效:借助 paperxie 智能撰写工具搞定各层级期刊论文
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/期刊论文https://www.paperxie.cn/ai/journalArticleshttps://www.paperxie.cn/ai/journalArticles 开篇概述 学术论文投稿发表,是学业深造、科研成果落地的关键环节。日常创作过程里ÿ…...
