Python爬虫---解析---xpath

1.1  安装xpath: 点击安装Xpath 

1.2  将安装好的程序解压,打开浏览器,找到程序扩展,把解压好的程序托进来,如下图所示:

1.3  设置快捷键:打开/关闭xpath

1.4  成功后的图例:按刚刚设置的快捷键 ctrl+shift+x

使用例子 : 在QUERY里输入xpath语法(下文有讲解),RESULTS (1)可以校验是否正确

 

2.1 安装 lxml 库:pip install lxml -i https://pypi.douban.com/simple 

注意:需要安装在python解释器相同的位置

2.2  导入:from lxml import etree

2.3  使用

1.路查询:   1)//: 查找所有子孙节点,不考虑层级关系  2) / : 找直接子节点
2.谓词查询: 1)//div[@id]   2)//div[@id="idname"]
3.属性查询: 1)//@class
4.模糊查询: 1)//div[contains(@id,"he")]   2)//div[starts-with(@id,"he")] I
5.内容查询: 1)//div/h1/text()
6.逻辑运算   1)//div[@id="idname”and @class="classname"] 与  2)//title| //price  或

1)xpath解析本地文件    # etree.parse("xx.html)
2)xpath解析服务器响应的数据  # etree.HTML(response.read().decode("utf-8))

from lxml import etree# xpath解析
# 1)本地文件    # etree.parse("xx.html)
# 2)服务器响应的数据 response.read().decode("utf-8")  # etree.HTML(response.read().decode("utf-8))# xpath解析本地文件
tree = etree.parse("1218-解析-xpath的基本使用.html")
print(tree)# xpath基本语法:tree.xpath("xpath路径")
li_list = tree.xpath("//ul/li")  # 查找ul下面的li  子节点
li_list1 = tree.xpath("//body//li")  # 查找body下面的li  子孙节点
li_list2 = tree.xpath("//ul/li[@id]")  # 查找所有有id的属性的li标签
li_list3 = tree.xpath("//ul/li[@id]/text()")  # 查找所有有id的属性的li标签文本
li_list4 = tree.xpath("//ul/li[@id='l1']/text()")  # 查找所有有id为l1的属性的li标签文本
li_list5 = tree.xpath("//ul/li[@id='l1']/@class")  # 查找到id为l1的li标签的class的属性值
li_list6 = tree.xpath("//ul/li[contains(@id,'l')]/text()")  # 查询包含l的li标签
li_list7 = tree.xpath("//ul/li[starts-with(@id,'l')]/text()")  # 查询id的值以l开头的li标签
li_list8 = tree.xpath("//ul/li[@id='l1' and @class='c1']/text()")    # 查询id为l1和class为c1的标签
li_list9 = tree.xpath("//ul/li[@id='l1']/text() | //ul/li[@id='l2']/text()")  # 查询id为l1或id为l2的标签
# li_list9 = tree.xpath("//ul/li[@id='l1' | @id='l2']/text()")   # 不能这样写
print(li_list9)# 判断列表的长度
print(len(li_list))

html文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"/><title>Document</title>
</head>
<body><ul><li id="l1" class="c1">北京</li><li id="l2">上海</li><li id="c3">深圳</li><li id="c4">武汉</li></ul><ul><li>大连</li><li>锦州</li><li>沈阳</li></ul>
</body>
</html>

例子:获取百度网站的 “百度一下” 四个字

注:xpath的返回值是一个列表类型的数据

# 1)获取网页的源码
# 2)解析服务器响应的文件
# 3)打印import urllib.request
from lxml import etreeurl = "https://www.baidu.com"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
# 请求对象的定制
request = urllib.request.Request(url=url,headers=headers)
# 模拟浏览器向服务器发起请求
response = urllib.request.urlopen(request)
# 获取响应数据
content = response.read().decode("utf-8")
# print(content)# 解析网页源码,获取数据# 解析服务器响应的文件
tree = etree.HTML(content)# 获取想要的数据  xpath的返回值是一个列表类型的数据
result= tree.xpath("//input[@id='su']/@value")[0]
print(result)   # 百度一下

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

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

相关文章

MatGPT - 访问 OpenAI™ ChatGPT API 的 MATLAB® 应用程序

系列文章目录 前言 MatGPT 是一款 MATLAB 应用程序&#xff0c;可让您轻松访问 OpenAI 的 ChatGPT API。使用该应用程序&#xff0c;您可以加载特定用例的提示列表&#xff0c;并轻松参与对话。如果您是 ChatGPT 和提示工程方面的新手&#xff0c;MatGPT 不失为一个学习的好方…

Linux网络编程(一):网络基础(上)

参考引用 UNIX 环境高级编程 (第3版)嵌入式Linux C应用编程-正点原子 1. 网络通信概述 网络通信本质上是一种进程间通信&#xff0c;是位于网络中不同主机上的进程之间的通信&#xff0c;属于 IPC 的一种&#xff0c;通常称为 socket IPC&#xff0c;网络通信是为了解决在网络…

【ARM Trace32(劳特巴赫) 高级篇 21 -- Trace 系统性能分析 Performance Analyzer】

请阅读【Trace32 ARM 专栏导读】 文章目录 Performance AnalyzerPerf 操作步骤采样对象PC采样对象Memory采样对象 TaskPerformance Analyzer sample-based profiling 通常也叫做Trace32 的性能分析(Perf), 这个功能是通过周期性的采样来实现的。被采样到的数据可以被用于统计…

跨平台数据库管理软件Navicat Premium 16 mac高级功能

Navicat Premium 16 mac是一款功能强大的跨平台数据库管理工具&#xff0c;支持多种数据库类型&#xff0c;如MySQL、MariaDB、Oracle、SQLite、PostgreSQL等等。它提供了丰富的数据库管理功能和工具&#xff0c;可以帮助开发人员和数据库管理员快速地创建、管理和维护数据库。…

面向 NLP 任务的大模型 Prompt 设计

很久之前&#xff0c;我们介绍到&#xff0c;prompt是影响下游任务的关键所在&#xff0c;当我们在应用chatgpt进行nlp任务落地时&#xff0c;如何选择合适的prompt&#xff0c;对于SFT以及推理环节尤为重要。 不过&#xff0c;硬想不是办法&#xff0c;我们可以充分参考开源的…

14:00面试,14:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

局域网其他pc如何访问宿主机虚拟机IP?

文章目录 背景贝瑞蒲公英设置虚拟机网络连接测试1.连接远程服务2.连接远程桌面 背景 使用贝瑞蒲公英异地组网&#xff0c;将家里的pc作为pgsql服务器在公司使用&#xff0c;但是虚拟机的ip和端口访问不了 贝瑞蒲公英 设置虚拟机网络 就是添加端口转发规则 连接测试 1.连接远程…

C语言—每日选择题—Day57

指针相关博客 打响指针的第一枪&#xff1a;指针家族-CSDN博客 深入理解&#xff1a;指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 下面程序段&#xff08;&#xff09; char *str[] {"ABC", "DEF", "GHI"}; puts(str[1]); A&#xff1a;A…

css的filter全属性介绍

原图&#xff1a; 模糊&#xff08;blur&#xff09; 单位可为px或rem&#xff0c;值越大&#xff0c;越模糊 filter:blur(3px) filter:blur(0.3rem) 亮度(brightness) 值可为数字或百分数&#xff0c;小于1时&#xff0c;亮度更暗&#xff1b;等于1时&#xff0c;无变化&am…

基于py32f030/qfn32开发的tft屏电子烟方案

一次性电子烟这些年在功能外观上不断迭代更新&#xff0c;在海外可以说是非常热门的电子烟产品。随着海外消费市场需求不断演变&#xff0c;用户开始追求更多可能比如&#xff1a;想知道设备还剩多少电池和烟油&#xff0c;想避免干烧的吸入口感和低电量的意外&#xff0c;想让…

实战案例:缓存不一致问题的解决(redis+本地缓存caffine)

一.问题引入 目前在写项目的时候&#xff0c;在B端查看文章&#xff0c;A端修改文章。为了增加效率&#xff0c;以及防止堆内存溢出&#xff0c;在B端选择本地缓存文章的方案。但是目前出现了A端对文章修改之后&#xff0c;B端读的还是旧数据&#xff0c;出现了缓存不一致的问…

《数据结构、算法与应用C++语言描述》- 最小赢者树模板的C++实现

赢者树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_30winnerTree 比赛规则 假定有 n 个选手参加一次网球比赛。比赛规则是“突然死亡法”(sudden-death mode)&#xff1a;一名选手只要输掉一场球&#xff0c;就被淘汰。一对一对…