Python爬虫lxml模块安装导入和xpath基本语法
lxml模块是Python的一个解析库,主要用于解析HTML和XML文件。
一、安装导入
使用包管理器安装,在cmd下或编辑器下的控制台,运行:
pip install lxml
导入:
from lxml import etree
二、xpath基础知识
XPath(XML Path Language,即XML路径语言)是一种在XML文档中查找信息的语言。它基于XML的树状结构,使用路径表达式来选取XML文档中的节点或节点集
- //:代表寻找所有(如://div,找到的就是页面所有的div标签)
- /:代表从根节点找一个
- @:寻找属性(如://div[@class='123'],找到的是所有class属性值为123的标签)
也可以寻找属性值://div/@class。找到的是所有div的class属性值
可以结合节点选择器使用,如 //book[@price>35] 表示选择所有 price 属性值大于35的 book 元素。
- 当前节点:使用点
.表示选取当前节点。 - 父节点:使用两个点
..表示选取当前节点的父节点。 *匹配任何元素名。例如,//*表示选择文档中的所有元素。@*匹配任何属性名。例如,//book[@*]表示选择所有具有至少一个属性的book元素。- 谓词用于进一步筛选满足条件的节点,它被嵌在方括号
[]中。例如,/root/child[1]表示选择root元素的第一个child子元素。 - 谓词可以使用比较运算符(如
=、!=、<、>等)、逻辑运算符(如and、or、not)和XPath函数(如last()、position()、starts-with()、contains()等)。 child::选择当前节点的子元素节点。attribute::选择当前节点的属性。descendant::选择当前节点的所有后代节点。parent::选择当前节点的父节点。ancestor::选择当前节点的所有祖先节点。following-sibling::选择当前节点之后的同级节点。preceding-sibling::选择当前节点之前的同级节点
三、案例
比如我们有一个数据:
html_data = '''
<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"><span class="bold">third item</span></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的结构,但是,xpath需要通过结构路径寻找节点,所以我们需要补全结构,而且要把这个数据解析为element对象才可以通过xpath对其操作,所以我们用到以下语法:
html=etree.HTML(html_data)
etree.HTML():将字符串形式的HTML代码解析为Element对象。该函数会自动补全缺失的标签,并尝试修正HTML代码中的错误。括号中是要解析的数据,html是他解析后返回的element对象。
接下来我们就可以对这个数据进行操作了
案例1:
拿到第二个li的class值:
html.xpath("//li[2]/@class")
案例2:
拿到最后一个li的a标签的href属性值:
html.xpath("//li[last()]/a/@href")
案例3:
根据属性值获取元素内容
html.xpath("//li/a[@href='link1.html']/text()")
相关文章:
Python爬虫lxml模块安装导入和xpath基本语法
lxml模块是Python的一个解析库,主要用于解析HTML和XML文件。 一、安装导入 使用包管理器安装,在cmd下或编辑器下的控制台,运行: pip install lxml 导入: from lxml import etree 二、xpath基础知识 XPath&#…...
python魔法(python高级magic方法进阶)
python特殊方法(magic方法也叫魔术方法) 魔法方法是python的内置函数,一般以双下划线开头和结尾, 构造和初始化 每个人都知道一个最基本的魔术方法, init 。 通过此方法我们可以定义一个对象的初始操作。 然而,当我调用 x S…...
【论文笔记】Flamingo: a Visual Language Model for Few-Shot Learning
🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Flamingo: a Visual Langu…...
问:JAVA阻塞队列实现类及最佳实践?
在多线程编程中,阻塞队列作为一种关键的数据结构,为线程间安全、高效的数据交换提供了重要支持。Java的java.util.concurrent包中提供了多种阻塞队列的实现,每种实现都有其独特的特点和适用场景。 一、阻塞队列实现类 以下是Java中Blocking…...
Springboot3 + MyBatis-Plus + MySql + Vue + ProTable + TS 实现后台管理商品分类(最新教程附源码)
Springboot3 MyBatis-Plus MySql Uniapp 商品加入购物车功能实现(针对上一篇sku) 1、效果展示2、数据库设计3、后端源码3.1 application.yml 方便 AliOssUtil.java 读取3.2 model 层3.2.1 BaseEntity3.2.1 GoodsType3.2.3 GoodsTypeSonVo3.3 Controll…...
消费电子制造企业如何使用SAP系统提升运营效率与竞争力
在当今这个日新月异的消费电子市场中,企业面临着快速变化的需求、激烈的竞争以及不断攀升的成本压力。为了在这场竞赛中脱颖而出,消费电子制造企业纷纷寻求数字化转型的突破点,其中,SAP系统作为业界领先的企业资源规划(ERP)解决方…...
算法记录——树
二叉树 3.1二叉树的最大深度 思路:二叉树的最大深度 根节点的最大高度。因此本题可以转换为求二叉树的最大高度。 而求高度的时候应该采用后序遍历。遍历顺序为:左右中。每次遍历的节点按后序遍历顺序,先收集左右孩子的最大高度,…...
单片机在控制和自动化任务中的应用场景广泛
单片机在控制和自动化任务中的应用场景广泛,以下是一些具体示例: 1. 家电控制 洗衣机:单片机用于控制洗衣周期、温度和水位。微波炉:控制加热时间、功率和用户界面。 2. 工业自动化 生产线监控:单片机用于控制传送…...
UEFI EDK2框架学习(三)——protocol
一、Protocol协议 搜索支持特定Protocol的设备,获取其Handle gBS->LocateHandleBuffer 将内存中的Driver绑定到给定的ControllerHandle gBS->OpenProtocol 二、代码实现 Protocol.c #include <Uefi.h> #include <Library/UefiLib.h> #includ…...
PostgreSQL的字段存储类型了解
PostgreSQL的字段存储类型了解 在 PostgreSQL 中,每个字段(列)都有其存储类型,这些存储类型决定了数据库如何存储和处理该字段的数据。了解和适当地利用这些存储类型,可以提高数据库的性能和存储效率。 主要的存储类…...
CTFshow 命令执行 web29~web36(正则匹配绕过)
目录 web29 方法一:include伪协议包含文件读取 方法二:写入文件 方法三:通识符 web30 方法一:filter伪协议文件包含读取 方法二:命令执行函数绕过 方法三:写入文件 web31 方法一:filter伪…...
【顺序表使用练习】发牌游戏
【顺序表使用练习】发牌游戏 1. 介绍游戏2. 实现52张牌3. 实现洗牌4. 实现发牌5. 效果展示 1. 介绍游戏 首先先为大家介绍一下设计要求 实现52张牌(这里排除大小王)洗牌——打乱牌的顺序发牌——3个人,1人5张牌 2. 实现52张牌 创建Code对象创…...
1.7 编码与调制
欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 前言前言1 基本术语2 常用的编码方法2.1 不归零编码2.2 归零编码2.3 反向归零编码2.4 曼彻斯特编码2.5 差分曼彻斯特编码 3 常用的调制方法3.1 调幅(AM)…...
004集—— txt格式坐标写入cad(CAD—C#二次开发入门)
如图所示原始坐标格式,xy按空格分开,将坐标按顺序在cad中画成多段线: 坐标xy分开并按行重新输入txt,效果如下: 代码如下 : using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Runtime; us…...
CSS中的font-variation-settings:探索字体的可变性
随着Web字体的发展,设计师们不再局限于传统的字体样式。现代Web字体支持可变字体(Variable Fonts),这种字体允许开发者在单一的字体文件中包含多种字形样式。通过使用CSS中的font-variation-settings属性,我们可以控制…...
组合优化与凸优化 学习笔记5 对偶拉格朗日函数
有的时候约束条件有点难搞,我们可以把它放到目标函数里面。 记得之前凸函数的时候的结论吗?一大堆函数,每一段都取最大的,最后会得到一个凸函数。同理,每一段都取最小的,得到的是一个凹函数。就这样&#x…...
监控易监测对象及指标之:Exchange邮件服务器监测
在现代企业运营中,邮件服务器的作用至关重要,它不仅承载着企业内外的信息传递,还是协同工作的重要工具。为了确保邮件服务器的稳定运行,以及邮件的顺畅收发,采用高效的监控系统是不可或缺的。监控易作为一款专业的监控…...
【机器学习基础】Transformer学习
Transformer学习 梯度消失FeedForward层激活函数的主要作用是在网络中加入非线性变换 梯度消失 梯度爆炸 FeedForward层 Transformer结构: Transformer结构主要分为两大部分: 一是Encoder层结构:Encoder 的输入由 Input Embedding 和 Positional Embedding 求和输入Multi…...
mysql如何不使用窗口函数,去统计出入库情况
mysql如何不使用窗口函数,去统计出入库情况 你把这个表看做 进出库表,每个物料把时间正序后 依次累加数量 ,看这个物料的时间线上 是否会出现负数,1号进货5个 2号出库3个 3号你不能出库3个 最多俩个 不然就是负库存,…...
uni-app canvas文本自动换行
封装 支持单行文本超出换行。多行文本顺位排版 // 填充自动换行的文本function fillFeedText({ctx, text, x, y, maxWidth, lineHeight, color, size}) {// 文本配置ctx.setFontSize(size);ctx.setFillStyle(color);// 计算文本换行宽高,换行逻辑const words text…...
GTX1060老显卡也能跑PyTorch!保姆级Win10+CUDA11.3+cudnn8.2环境配置避坑实录
GTX1060老显卡深度学习环境搭建全指南:从驱动优化到PyTorch实战 手里还握着五年前入手的GTX1060显卡?别急着让它退役。这套经典的Pascal架构显卡依然能在深度学习入门阶段大显身手。本文将带你完整走通Win10系统下的CUDA 11.3 cuDNN 8.2 PyTorch 1.11…...
丹青识画系统Prompt工程指南:如何用文本描述引导更精准的风格鉴定
丹青识画系统Prompt工程指南:如何用文本描述引导更精准的风格鉴定 丹青识画这类AI系统,很多人以为它就是个“看图说话”的工具,把图片丢进去,它告诉你这是什么风格、哪个流派。这确实没错,但如果你只这么用࿰…...
OpenClaw浏览器自动化:GLM-4.7-Flash驱动的智能搜索与数据采集
OpenClaw浏览器自动化:GLM-4.7-Flash驱动的智能搜索与数据采集 1. 为什么需要浏览器自动化助手 上周我需要做一个小型市场调研,收集20家竞品的产品定价和功能列表。手动打开每个网站、复制粘贴数据、整理成表格,花了整整一个下午。这种重复…...
leOS2:基于看门狗定时器的轻量级嵌入式调度器
1. leOS2:基于看门狗定时器的轻量级嵌入式调度器 leOS2(little embedded Operating System 2)是一个专为资源受限的8位AVR微控制器设计的极简实时调度器。它不依赖于通用定时器(如Timer0/Timer1),而是创造…...
精准匹配歌词:Foobar2000歌词插件配置完全指南
精准匹配歌词:Foobar2000歌词插件配置完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 3分钟完成版本适配检测 如何确定你的Foobar20…...
Kazam vs OBS:Ubuntu 24.04 屏幕录制工具对比与选择指南
Kazam vs OBS:Ubuntu 24.04 屏幕录制工具深度评测与实战选择 在数字内容创作爆发的时代,屏幕录制已成为游戏实况、在线教学、产品演示的标配技能。对于Ubuntu 24.04用户而言,Kazam和OBS Studio这两款开源工具常被拿来比较——前者以轻量简洁著…...
RK3588开发板TF卡槽改造:实现SDIO WIFI模组O9201SB的灵活接入
1. RK3588开发板TF卡槽改造背景与价值 最近在折腾RK3588开发板时,发现一个很有意思的玩法:把原本只能插TF卡的卡槽改造成支持SDIO WIFI模组的接口。这个改造特别适合那些需要灵活接入不同WIFI模组的开发者,比如我在做智能家居网关开发时&…...
Edge浏览器专属:B站直播实时字幕插件开发全记录(附源码下载)
Edge浏览器实现B站直播实时字幕的技术解析与实战 作为一名长期关注Web语音技术的开发者,我最近在Edge浏览器上成功实现了一个B站直播实时字幕插件。这个项目的核心价值在于解决了无字幕直播场景下的信息获取难题——根据用户反馈,超过68%的观众会在没有字…...
WebPlotDigitizer图表数据提取工具:科研工作者的终极数字化解决方案
WebPlotDigitizer图表数据提取工具:科研工作者的终极数字化解决方案 【免费下载链接】WebPlotDigitizer WebPlotDigitizer: 一个基于 Web 的工具,用于从图形图像中提取数值数据,支持 XY、极地、三角图和地图。 项目地址: https://gitcode.c…...
Original PIPE vs. Serdes PIPE: Understanding the Key Differences in PHY Interface Design
1. 从零理解PIPE接口:物理层设计的通用语言 第一次接触PIPE接口时,我完全被各种缩写搞晕了。直到在某个PCIe项目中被时序问题折磨了整整两周后,才真正明白这个接口的重要性。简单来说,PIPE(PHY Interface for PCI Expr…...
