Python爬虫基础——XPath表达式

        首先说一下这节内容在学习过程中存在的问题吧,在爬取百度网页文字时,出现了问题,就是通过表达式在网页搜索中可以定位,但是通过代码无法定位,请教了一位老师,他说是动态链接,目前这部分内容比较陌生,还没有学习到,因此过一段时间在进行补充验证。我一般在学习时都是通过复现作者所写的代码,然后在进行扩展,最后结合网上的思路编写一个想读复杂的案例。

1、实例化etree对象

1.1 etree.parse('HTML文档路径') 使用patse()函数对etree进行实例化(已经验证)

1.2 etree.HTML('网页源码') 使用patse()函数对etree进行实例化(已经验证)

2、用XPath表达式定位标签并提取数据(动态参数存在问题,爬取静态类没有问题)参考文中代码

2.1 定位标签 2.1.1 标签名定位

2.1.2 索引定位

2.1.3 属性定位

2.1.4 逻辑也能算定位

2.2 提取文本内容和属性值

3、快速获取标签节点的Xpath表达式(已经验证)

##############################
##作者:白雪公主的后妈
##时间:2024年1月6日
##主题:Python爬虫基础——Xpath表达式
##主要内容:学习BeaytifulSoup对象中的lxml模块中的etree类,即etree类可以将网页源码实例化为一个etree对象,并shiyongXpanth表达式进行标签定位
###############################1、实例化etree对象
#要使用Xpanth表达式进行数据解析,首先需要实例化一个etree对象,具体方法有两种
#1.1    etree.parse('HTML文档路径')     使用patse()函数对etree进行实例化
# from lxml import etree
# html = etree.parse('text1.html')        #将HTML文档加载到etree类中,实例化成为一个名为html的etree对象
# #1.2    etree.HTML('网页源码')     使用patse()函数对etree进行实例化
# from lxml import etree
# import requests
# #身份码伪装
# header = {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36 Edg/131.0.0.0"}        #浏览器身份验证
# #请求的地址
# url = "https://www.baidu.com"
# #发起请求,并获得网页源代码
# response = requests.get(url,headers=header).text
# html = etree.HTML(response)        #将网页源码加载到etree类中,实例化成为一个名为html的etree对象#2、用XPath表达式定位标签并提取数据
#完成etree对象实例化后,可以使用XPath表达式定位标签并提取数据了
#2.1 定位标签
#2.1.1 标签名定位
'''
假设要定位<ul>标签下的所有<li>标签节点,在途中从上往下依次是<html>标签节点——><div>标签节点2——>
<ul>标签节点2——><li>标签节点1、<li>标签节点2。注意用“/”表示一个层次,用“//”表示多个层次,因此,
上述路径XPath可以表示为“/html/body/div[1]/ul/il”。如果不加分区的定义所有的<li>标签,也可以用"//"。
'''
#2.1.2 索引定位
'''
etree对象的每一个层阶都是一个包含所有标签节点的列表,如果同一层级中有多个同名的标签节点,
使用列表切片就能定位到所需的标签节点,即通过索引定位。
'''
#2.1.3 属性定位
'''
在复杂的网页中,每个标签都有其属性,此时可以通过属性进行定位。
'''
import requests
from lxml import etree
#身份码伪装
header = {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36 Edg/131.0.0.0"}        #浏览器身份验证
#请求的地址
#url = "https://www.baidu.com"
url = "https://www.hongxiu.com/chapter/30300190804146407/81349808731782632"
#发起请求,并获得网页源代码
response = requests.get(url,headers=header).text
# print(response)
html=etree.HTML(response)     #实例化etree对象
# print(html)print(html.xpath('//*[@id="chapter-81349808731782632"]/div/div[2]/div/p'))
#(html.xpath('//*[@id="hotsearch-content-wrapper"]/text()'))            #?????百度这里是动态链接书上给给到的这个方法有问题
# print(html.xpath('//*[@class="title"'))             #用class属性定位标签
'''
"//"表示多层级,处于Xpath表达式的开头代表从任意层级开始定位;“*”代表任意标签;"[@class="title"代表class属性值为"title"
的任意标签。如果拥有同一个class属性的标签不止一个,可以考虑用id属性值来定位。如果还不能达到目的,可以用其他属性来定位,也
可以将上述XPath表达式中的“*”替换为指定的标签名称,如html.xpath('//p[@class="title"')
'''
#2.1.4 逻辑也能算定位
'''
使用上述方法仍然不能定位,可以配合逻辑运算来进行更精确的定位。
'''
# html.xpath('//p[@class="title" and @name="color"]')
# html.xpath('//p[@class="title" or @name="color"]')
#2.2 提取文本内容和属性值
'''
定位到标签节点后,可在Xpath表达中后面添加“/text”来提取该节点下的所有文本内容,添加“text()”来提取该节点的所有文本内容,
添加“/@属性名”来提取该节点的指定属性值
'''
# html.xpath('//*[@class="title"]/text()')
# html.xpath('//*[@class="title"]//text()')
# html.xpath('//*[@class="title"]/@id')
#3、快速获取标签节点的Xpath表达式
'''
在谷歌浏览器中打开一个网页,然后打开开发者工具,在“Elements”选项卡中的网页源码中邮寄要获取的表达式的标签,
选择copy——>copy xpath即可赋值XPath表达式粘贴到爬虫程序中
'''

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

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

相关文章

NOVA:AutoRegressive Video Generation Without Vector Quantization——自回归视频生成无需向量量化

这篇文章介绍了一种名为NOVA的新型自回归模型&#xff0c;用于高效的文本到图像和文本到视频生成。以下是文章的主要内容总结&#xff1a; 1. 研究背景与问题 自回归大语言模型&#xff08;LLMs&#xff09;在自然语言处理&#xff08;NLP&#xff09;中表现出色&#xff0c;但…

eNSP之家——路由器--入门实例详解

eNSP路由器配置&#xff1a;IP、DHCP与DNS详解-CSDN博客 练习1&#xff1a;两个路由器配置ip地址&#xff0c;并用ping命令测试连通性。 打开ensp&#xff0c;拉进来两个路由器AR2220,再用auto连接两个路由器。 选中两个路由器&#xff0c;右键启动&#xff0c;等待半分钟路由…

Spring 设计模式:经典设计模式

Spring 设计模式&#xff1a;经典设计模式 引言 Spring 框架广泛使用了经典设计模式。 这些模式在 Spring 内部发挥着重要作用。 通过理解这些设计模式在 Spring 中的应用&#xff0c;开发者可以更深入地掌握 Spring 框架的设计哲学和实现细节。 经典设计模式 控制反转&am…

【HarmonyOS NEXT】鸿蒙应用点9图的处理(draw9patch)

【HarmonyOS NEXT】鸿蒙应用点9图的处理&#xff08;draw9patch&#xff09; 一、前言&#xff1a; 首先在鸿蒙中是不支持安卓 .9图的图片直接使用。只有类似拉伸的处理方案&#xff0c;鸿蒙提供的Image组件有与点九图相同功能的API设置。 可以通过设置resizable属性来设置R…

STM32-笔记39-SPI-W25Q128

一、什么是SPI&#xff1f; SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且 在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;同时为…

【微服务】8、分布式事务 ( XA 和 AT )

文章目录 利用Seata解决分布式事务问题&#xff08;XA模式&#xff09;AT模式1. AT模式原理引入2. AT模式执行流程与XA模式对比3. AT模式性能优势及潜在问题4. AT模式数据一致性解决方案5. AT模式一阶段操作总结6. AT模式二阶段操作分析7. AT模式整体特点8. AT模式与XA模式对比…

CTF知识点总结(三)

空格绕过方式&#xff1a; $IFS ${IFS} $IFS$数字 < <> 三种绕过方式&#xff1a; 1.sh /?ip127.0.0.1;echo$IFS$2Y2F0IGZsYWcucGhw|base64$IFS$2-d|sh 2.变量拼接 /?ip127.0.0.1;ag;cat$IFS$2fla$a.php 3.内联注释(将反引号命令的结果作为输入来执行命令) /?i…

《Spring Framework实战》5:Spring Framework 概述

欢迎观看《Spring Framework实战》视频教程 Spring 使创建 Java 企业应用程序变得容易。它为您提供一切 需要在企业环境中采用 Java 语言&#xff0c;并支持 Groovy 和 Kotlin 作为 JVM 上的替代语言&#xff0c;并且可以灵活地创建许多 类型的架构。从 Spring Framework 6.0 开…

解决npm报错:sill idealTree buildDeps

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 报错信息 使用 npm 安装依赖时报错&#xff1a;sill idealTree buildDeps 解决方案 请按照以下步骤进行相关操作&#xff1a; 1、删除 C:\Users{账户}\ 文件夹中的 .npm…

formik 的使用

礼记有言&#xff1a;独学而无友&#xff0c;则孤陋而寡闻 让我们一起了解更多便捷方法&#xff0c;缩短开发时间去摸鱼&#xff0c;嘿嘿。 框架&#xff1a;react 在写表单的时候&#xff0c;我不太喜欢把验证写的很繁琐&#xff0c;这里讲介绍&#xff0c;验证表单的非常好用…

JVM实战—OOM的生产案例

1.每秒仅上百请求的系统为何会OOM(RPC超时时间设置过长导致QPS翻几倍) (1)案例背景 在这个案例中&#xff0c;一个每秒仅仅只有100请求的系统却因频繁OOM而崩溃。这个OOM问题会涉及&#xff1a;Tomcat底层工作原理、Tomcat内核参数的设置、服务请求超时时间。 (2)系统发生OOM的…

数字IC设计高频面试题

在数字IC设计领域&#xff0c;面试是评估候选人技术能力和问题解决能力的重要环节。数字IC设计的复杂性和要求在不断提高。面试官通常会提出一系列面试题&#xff0c;以考察应聘者在数字设计、验证、时钟管理、功耗优化等方面的专业知识和实践经验。 这些题目不仅涉及理论知识…

OSI模型的网络层中产生拥塞的主要原因?

&#xff08; 1 &#xff09;缓冲区容量有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 2 &#xff09;传输线路的带宽有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 3 &#xff09;网络结点的处理能力有限&#xff1b;&#xff08; 1 分…

用OpenCV实现UVC视频分屏

分屏 OpencvUVC代码验证后话 用OpenCV实现UVC摄像头的视频分屏。 Opencv opencv里有很多视频图像的处理功能。 UVC Usb 视频类&#xff0c;免驱动的。视频流格式有MJPG和YUY2。MJPG是RGB三色通道的。要对三通道进行分屏显示。 代码 import cv2 import numpy as np video …

备战蓝桥杯 链表详解

链表概念 上一次我们用顺序存储实现了线性表&#xff0c;这次我们用链式存储结构实现的线性表就叫链表 链表每个节点包含数据本身和下一个节点和上一个节点的地址 链表的分类 单链表 双链表 带头链表 不带头链表 循环链表等等 我们竞赛一般都用的是带头链表 双向链表的…

DeepSeek:性能强劲的开源模型

deepseek 全新系列模型 DeepSeek-V3 首个版本上线并同步开源。登录官网 chat.deepseek.com 即可与最新版 V3 模型对话。 性能对齐海外领军闭源模型​ DeepSeek-V3 为自研 MoE 模型&#xff0c;671B 参数&#xff0c;激活 37B&#xff0c;在 14.8T token 上进行了预训练。 论…

Redis Zset有序集合

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Redis Zset有序集合 收录于专栏[redis] 本专栏旨在分享学习Redis的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 概述 普通命令 ZAD…

Python中的可变对象与不可变对象;Python中的六大标准数据类型哪些属于可变对象,哪些属于不可变对象

Python中的可变对象与不可变对象&#xff1b;Python中的六大标准数据类型哪些属于可变对象&#xff0c;哪些属于不可变对象 Python中的可变对象与不可变对象一、Python的六大标准数据类型1. 数字类型 (Number)2. 字符串 (String)3. 列表 (List)4. 元组 (Tuple)5. 集合 (Set)6. …

Unity 2d描边基于SpriteRender,高性能的描边解决方案

目标 以Unity默认渲染管线为例&#xff0c;打造不需要图片内边距&#xff0c;描边平滑&#xff0c;高性能的描边解决方案 前言 在2d游戏中经常需要给2d对象添加描边&#xff0c;来突出强调2d对象 当你去网上查找2d描边shader&#xff0c;移植到项目里面&#xff0c;大概率会…

Oracle OCP考试常见问题之线上考试流程

首先要注意的是&#xff1a;虽然Oracle官方在国际上取消了获得OCP认证需要培训记录的要求&#xff0c;但在中国区&#xff0c;考生仍然需要参加Oracle的官方或者其合作伙伴组织的培训&#xff0c;并且由Oracle授权培训中心向Oracle提交学员培训记录。考生只有在完成培训并通过考…