python-爬虫-xpath方法-批量爬取王者皮肤图片

import requests
from lxml import etree

获取NBA成员信息

# 发送的地址
url = 'https://nba.hupu.com/stats/players'
# UA 伪装  google
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}
r = requests.get(url)
# print(r.text)  # jupyter 打印可以看到格式化的html数据
# 将HTML文本解析成Element对象
e = etree.HTML(r.text)
players = e.xpath('//*[@id="data_js"]/div[4]/div/table/tbody/tr/td[2]/a/text()')
teams = e.xpath('//*[@id="data_js"]/div[4]/div/table/tbody/tr/td[3]/a/text()')
# 保存到txt文件
with open('nba.txt','w',encoding='utf-8') as f:for player,team in zip(players,teams):f.write(f'球员:{player} - - - 球队:{team}\n')

球员:乔尔-恩比德 - - - 球队:76人
球员:卢卡-东契奇 - - - 球队:独行侠
球员:达米安-利拉德 - - - 球队:开拓者

批量爬取王者荣耀皮肤图片

在这里插入图片描述

  • 爬取一张图片
url = 'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/505/505-bigskin-7.jpg'
r = requests.get(url)
# 保存图片
# w write b 二进制
with open('a.jpg','wb') as f:f.write(r.content)

在这里插入图片描述

  • 该角色有7个皮肤 爬取7个图片
for i in range(1,8):url = f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/505/505-bigskin-{i}.jpg'r = requests.get(url)with open(f'{i}.jpg','wb') as f:f.write(r.content)    
  • 获取这7个皮肤的名字 保存图片
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.69'
}
url = 'https://pvp.qq.com/web201605/herodetail/505.shtml'
r = requests.get(url,headers=headers)
r.encoding='gbk'
e = etree.HTML(r.text)
# e.xpath 返回一个列表  使用索引[0]变为str
names = e.xpath('//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname')[0]  # '鹿灵守心&0|森&0|遇见神鹿&71|时之祈愿&94|时之愿境&42|山海·碧波行&109|真我赫兹&117'
# names.split('|') # split只能用于str,不能用于list  # ['鹿灵守心&0', '森&0', '遇见神鹿&71', '时之祈愿&94', '时之愿境&42', '山海·碧波行&109', '真我赫兹&117']
names = [name[0:name.index('&')] for name in names.split('|')] # ['鹿灵守心', '森', '遇见神鹿', '时之祈愿', '时之愿境', '山海·碧波行', '真我赫兹']
for i,n in enumerate(names):url = f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/505/505-bigskin-{i+1}.jpg'r = requests.get(url)with open(f'{n}.jpg','wb') as f:f.write(r.content)

在这里插入图片描述

  • 获取所有英雄皮肤
    在这里插入图片描述

把该行网址复制到网址栏,会自动下载该文件

https://pvp.qq.com/web201605/js/herolist.json

该文件内容如下,有英雄的各种信息
每个花括号 { } 是一个json数据
在这里插入图片描述

import requests
from lxml import etree
import os
from time import sleepheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.69'
}
url = 'https://pvp.qq.com/web201605/js/herolist.json'
r = requests.get(url,headers=headers)
for x in r.json():ename = x.get('ename')  # 数字  url里面变化的那个数字cname = x.get('cname')  # 英雄的名字if not os.path.exists(cname):os.makedirs(cname)urlone = f'https://pvp.qq.com/web201605/herodetail/{ename}.shtml'r = requests.get(url=urlone,headers=headers)r.encoding='gbk'e = etree.HTML(r.text)# e.xpath 返回一个列表  使用索引[0]变为strnames = e.xpath('//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname')[0]  # '鹿灵守心&0|森&0|遇见神鹿&71|时之祈愿&94|时之愿境&42|山海·碧波行&109|真我赫兹&117'# names.split('|') # split只能用于str,不能用于list  # ['鹿灵守心&0', '森&0', '遇见神鹿&71', '时之祈愿&94', '时之愿境&42', '山海·碧波行&109', '真我赫兹&117']names = [name[0:name.index('&')] for name in names.split('|')] # ['鹿灵守心', '森', '遇见神鹿', '时之祈愿', '时之愿境', '山海·碧波行', '真我赫兹']for i,n in enumerate(names):url = f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}-bigskin-{i+1}.jpg'r = requests.get(url)with open(f'{cname}/{n}.jpg','wb') as f:f.write(r.content) print(f'{n}已下载')sleep(1) 

部分图片展示
在这里插入图片描述
xpath分析
在这里插入图片描述

//ul[@class=“pic-pf-list pic-pf-list3”]/@data-imgname

asd = '鹿灵守心&0'
asd.index('心')  # 3  # 心在index3的位置

<generator object at 0x0000029394AFACF0> 迭代器 在最左和最右加上方括号[ ]就会变成str

os.makedirs and os.mkdir

os.makedirs和os.mkdir都是用于创建目录的函数,但有以下区别:

  1. os.mkdir只能创建一级目录,而os.makedirs可以同时创建多级目录。

  2. 如果要创建的目录已经存在,os.mkdir会抛出FileExistsError异常,而os.makedirs不会抛出异常。

  3. os.makedirs还可以通过设置exist_ok参数来控制是否抛出异常。如果exist_ok为True,表示即使目录已经存在也不会抛出异常,如果为False,则会抛出异常。

示例代码:

import os# 创建单级目录
os.mkdir('dir1')
# 创建多级目录
os.makedirs('dir2/subdir1/subdir2')# 创建已存在的目录
os.mkdir('dir1') # 会抛出异常
os.makedirs('dir2/subdir1/subdir2') # 不会抛出异常# 创建已存在的目录时,设置exist_ok参数
os.makedirs('dir2/subdir1/subdir2', exist_ok=True) # 不会抛出异常
os.makedirs('dir2/subdir1/subdir2', exist_ok=False) # 会抛出异常

xpath工具

# 将HTML文档加载进来
html = etree.parse('demo.html')# 将HTML文档解析成Element对象
root = html.getroot()

Python爬虫中,使用xpath提取HTML或XML文档中的元素是非常常见的操作。下面是etree库中xpath常用的方法:

  1. xpath():在文档中使用xpath表达式进行查找,返回匹配的元素列表。

  2. find():在文档中查找匹配xpath表达式的第一个元素,返回元素对象。

  3. findall():在文档中查找匹配xpath表达式的所有元素,返回元素对象列表。

  4. text属性:获取元素的文本内容。

  5. attrib属性:获取元素的属性。

  6. get()方法:获取指定属性的值。

  7. iter()方法:获取文档中所有匹配xpath表达式的元素,返回迭代器对象。

  8. Element()方法:创建一个新的元素对象。

  9. SubElement()方法:在指定元素下创建一个新的子元素。

  10. ElementTree()方法:创建一个新的XML文档树对象。

以上这些方法是在使用xpath提取HTML或XML文档中的元素时经常使用的方法,掌握了这些方法,就可以方便地对文档进行操作了。

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

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

相关文章

CSS笔记(黑马程序员pink老师前端)盒子阴影,文字阴影

盒子阴影 属性值为box-shadow,盒子阴影不占空间,不影响盒子之间的距离. 值说明h-shadow必需,水平阴影位置,允许为负值v-shadow必需,水平阴影位置,允许为负值blur可选,模糊距离,数值越大影子越模糊spread可选,影子的尺寸color可选,影子的颜色inset可选, 将外阴影改为内阴影(省…

微服务04-Gateway网关

作用 身份认证&#xff1a;用户能不能访问 服务路由&#xff1a;用户访问到那个服务中去 负载均衡&#xff1a;一个服务可能有多个实例&#xff0c;甚至集群&#xff0c;负载均衡就是你的请求到哪一个实例上去 请求限流功能&#xff1a;对请求进行流量限制&#xff0c;对服务…

sklearn中make_blobs方法:聚类数据生成器

sklearn中make_blobs()方法参数&#xff1a; n_samples:表示数据样本点个数,默认值100 n_features:是每个样本的特征&#xff08;或属性&#xff09;数&#xff0c;也表示数据的维度&#xff0c;默认值是2。默认为 2 维数据&#xff0c;测试选取 2 维数据也方便进行可视化展示…

FPGA实战小项目2

基于FPGA的贪吃蛇游戏 基于FPGA的贪吃蛇游戏 基于fpga的数字密码锁ego1 基于fpga的数字密码锁ego1 基于fpga的数字时钟 basys3 基于fpga的数字时钟 basys3

Android 大图显示优化方案-加载Gif 自定义解码器

基于Glide做了图片显示的优化&#xff0c;尤其是加载Gif图的优化&#xff0c;原生Glide加载Gif图性能较低。在原生基础上做了自定义解码器的优化&#xff0c;提升Glide性能 Glide加载大图和Gif 尤其是列表存在gif时&#xff0c;会有明显卡顿&#xff0c;cpu和内存占用较高&…

lambda表达式介绍

前言 lambda表达式是C11标准才支持的&#xff0c;有了它以后在一些地方进行使用会方便很多&#xff0c;尤其在一些需要仿函数的地方&#xff0c;lambda表达式完全可以替代它的功能。代码的可读性也会提高。 目录 1.lambda表达式 2.lambda表达式语法 3.函数对象和lambda表达…

2023年MySQL实战核心技术第二篇

目录 五 . 日志系统&#xff1a;一条SQL更新语句是如何执行的&#xff1f; 5.1 解释 5.2 重要的日志模块&#xff1a;redo log 5.2.1 解释 5.2.2 WAL&#xff08;Write-Ahead Logging&#xff09; 5.2.3 crash-safe。 5.3 重要的日志模块&#xff1a;binlog 5.3 .1 为什么会有…

元素周期表-背诵元素周期表更简单

元素周期表是一款极其炫酷、简约的记忆和查看周期表元素的软件。 【软件特点】&#xff1a; ●有趣谐音速记&#xff1a;软 件内有按周期、化合价、元素符号分类使用谐音速记的小技巧。 ●3D元素周期表&#xff1a;用户可以选择按表面、球体、螺旋、网格来3D炫酷的展示元素周期…

小白备战大厂算法笔试(三)——栈、队列、双向队列

文章目录 栈栈常用操作栈的实现基于链表的实现基于数组的实现 两种实现对比栈典型应用 队列队列常用操作队列实现基于链表的实现基于数组的实现 队列典型应用 双向队列双向队列常用操作双向队列实现基于双向链表的实现基于数组的实现 双向队列应用 栈 栈是一种遵循先入后出的逻…

MySQL之用户管理

用户 用户信息 MySQL中的用户&#xff0c;都存储在系统数据库mysql的user表中 ps&#xff1a; host&#xff1a; 表示这个用户可以从哪个主机登陆&#xff0c;如果是localhost&#xff0c;表示只能从本机登陆 user&#xff1a; 用户名 authentication_string&#xff1a; 用户…

【数据库事务日志碎片原理分析与方案】-分析篇

前言:说都数据库的事务日志&#xff0c;可以说我们是再熟悉不过的了。一般而言&#xff0c;我们都没有必 要去关心事务日志中的虚拟日志文件的个数。这里提到的“虚拟日志文件”的概念&#xff0c;我们 后面会进行专门的讲述。很多的时候&#xff0c;我们在建立数据库的时候&am…

使用Caffeine实现帖子的缓存来优化网站的运行速度

导入依赖 <!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine --><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>3.1.7</version>…

PyCharm下载安装

PyCharm下载链接 点击下载PyCharm Community Edition社区版&#xff08;PyCharm Professional专业版需要收费&#xff0c;但可以免费试用 30 天&#xff0c;也可以找到激活方式&#xff1b;而社区版是完全免费的&#xff0c;初学者学习 Python建议使用社区版&#xff0c;不会有…

Kafka的文件存储与稀疏索引机制

![在这里插入图片描述](https://img-blog.csdnimg.cn/dde7fc866d214985baaa87300a472578.png)这些是存储在分区(分区才是实际的存储)文件中的. seg是逻辑概念 而实际由log存储的. index是偏移量索引而timeindex是时间戳索引 log就是seg 找数据就是先找log 再从log去找

MYSQL 高级SQL语句

1、按关键字排序&#xff1a; order by 语句用来实现 &#xff0c;前面可以使用where字句使查询结果进一步过滤 asc 是按照升序排序 &#xff0c; 默认的 desc 是按照降序排序 order by的语法结构 例&#xff1a;select name,score from ku order by score desc; 表示将数…

数字图像处理-形态学图像处理

形态学图像处理 一、基础知识1.1 什么是形态学操作 二、腐蚀与膨胀2.1 腐蚀2.2 膨胀 三、开操作与闭操作3.1 开操作3.2 闭操作3.3 实验对比 四、一些基本的形态学算法4.1边界提取4.2空洞填充4.3 凸壳 一、基础知识 1.1 什么是形态学操作 数字图像处理中的形态学操作是一组用于…

链路追踪Skywalking快速入门

目录 1 Skywalking概述1.1 微服务系统监控三要素1.2 什么是链路追踪1.2.1 链路追踪1.2.2 OpenTracing1、数据模型&#xff1a;2、核心接口语义 1.3 常见APM系统1.4 Skywalking介绍1、SkyWalking 核心功能&#xff1a;2、SkyWalking 特点&#xff1a;3、Skywalking架构图&#x…

直播平台源码开发搭建APP的DASH协议:流媒体技术其中一环

在直播平台源码APP中&#xff0c;有着许许多多、多种多样的功能&#xff0c;比如短视频功能&#xff0c;帮助我们去获取信息&#xff0c;看到全世界用户身边发生的事情或是他们的生活&#xff1b;又比如直播功能&#xff0c;为用户提供了实时的娱乐享受&#xff0c;还让一些用户…

EVA: Visual Representation Fantasies from BAAI

本文做个简单总结&#xff0c;博主不是做自监督领域的&#xff0c;如果错误&#xff0c;欢迎指正。 链接 Code&#xff1a; Official&#xff1a;baaivision/EVA MMpretrain&#xff1a;open-mmlab/mmpretrain/tree/main/configs/eva02 Paper&#xff1a; EVA01&#xff1a;…

deepfm内容理解

对于CTR问题&#xff0c;被证明的最有效的提升任务表现的策略是特征组合(Feature Interaction)&#xff1b; 两个问题&#xff1a; 如何更好地学习特征组合&#xff0c;进而更加精确地描述数据的特点&#xff1b; 如何更高效的学习特征组合。 DNN局限 &#xff1a;当我们使…