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

news2025/1/11 22:56:56
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 sleep


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/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]变为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/{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.coloradmin.cn/o/978683.html

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

相关文章

jvs-智能bi(自助式数据分析)9.1更新内容

​jvs-智能bi更新功能 1.报表增加权限功能&#xff08;服务、模板、数据集、数据源可进行后台权限分配&#xff09; 每个报表可以独立设置权限&#xff0c;通过自定义分配&#xff0c;给不同的人员分配不同的权限。 2.报表新增执行模式 可选择首次报表加载数据为最新数据和历…

Android之 SVG绘制

一 SVG介绍 1.1 SVG&#xff08;Scalable Vector Graphics&#xff09;是可缩放矢量图形的缩写&#xff0c;它是一种图形格式&#xff0c;其中形状在XML中指定&#xff0c; 而XML又由SVG查看器呈现。 1.2 SVG可以区别于位图&#xff0c;放大可以做到不模糊&#xff0c;可以做…

mac pyenv无法切换python版本问题

看是zsh还是bash echo $SHELLzsh 配置到&#xff5e;/.zshrc 文件 vim ~/.zshrcexport PYENV_ROOT"$HOME/.pyenv" command -v pyenv >/dev/null || export PATH"$PYENV_ROOT/bin:$PATH" 执行 source ~/.zshrc bash vim ~/.bashrc export PYENV_R…

影像三维地形图制作

一、数据来源介绍 1. 数字高程数据 数字高程数据来源于中国科学院资源环境科学与数据中心&#xff08;https://www.resdc.cn/Default.aspx&#xff09;。 2. 公主岭市遥感影像数据 遥感影像数据数据来源网络。 二、 数据预处理 1. 公主岭市遥感影像数据预处理 从之前的图中…

c++ uml时序图

时序图 通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。 时序图和流程图的区别&#xff1a; 时序图强调对象之间的交互与时序关系&#xff0c;流程图则是针对一个过程或者活动进行全面而细致的展开。 时序图主要描绘多个对象之间的复杂关系&#xff0c;流…

第三方软件测评的重要性分析

1、首先&#xff0c;什么是软件测试&#xff1f; 很多人看到这个小标题肯定会一笑而过&#xff0c;但你绝不能忽视他的真正概念。 软件测试是检查实际结果与预期结果是否匹配并确保软件系统无缺陷的活动。软件测试还有助于识别产品与实际需求不符或是缺失项。测试活动既可以手…

华为数通方向HCIP-DataCom H12-821题库(单选题:301-320)

第301题 某台路由器运行 IS-IS,其输出信息如图所示,下列说法错误的是? [R1]display isis sdb local verboseDatabase information for ISIS(1) Level-1 Link State Database LSPID Seq Num Checksum Holdtime…

既要炫酷好看,又要出图快?可视化大屏模板了解下!

可视化大屏模板可以在很大程度上满足炫酷好看和出图快的需求。使用模板可以节约制作时间&#xff0c;像奥威BI系统就上线了大量的可视化大屏模板。这些模板实际上都是一张张完整的可视化大屏报表&#xff0c;从数据源到数据分析模型&#xff0c;再到数据可视化图表和智能分析功…

最小可用原型:极大降低风险的方法

最小可用原型&#xff1a;极大降低风险的方法【安志强趣讲279期】 趣讲大白话&#xff1a;先试一下水 **************************** 精益创业的最小可用原型MVP 胸怀大志&#xff0c;要从小做起 把愿景拆解成一个个独立的部分 每个独立的部分做出假设&#xff1a; 1、价值假设…

MAC层是如何工作的

有一个叫做 Hub 的东西&#xff0c;也就是集线器。这种设备有多个口&#xff0c;可以将宿舍里的多台电脑连接起来。但是&#xff0c;和交换机不同&#xff0c;集线器没有大脑&#xff0c;它完全在物理层工作。它会将自己收到的每一个字节&#xff0c;都复制到其他端口上去。这是…

Vue + Element UI 前端篇(八):管理应用状态

使用 Vuex 管理应用状态 1. 引入背景 像先前我们是有导航菜单栏收缩和展开功能的&#xff0c;但是因为组件封装的原因&#xff0c;隐藏按钮在头部组件&#xff0c;而导航菜单在导航菜单组件&#xff0c;这样就涉及到了组件收缩状态的共享问题。收缩展开按钮触发收缩状态的修改…

leetcode669. 修剪二叉搜索树(java)

修剪二叉搜索树 题目描述递归代码演示&#xff1a; 题目描述 难度 - 中等 LC - 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留…

Qt应用开发(基础篇)——普通按钮类 QPushButton QCommandLinkButton

一、前言 QPushButton类继承于QAbstractButton&#xff0c;是一个命令按钮的小部件。 按钮基类 QAbstractButton 按钮或者命令按钮是所有图形界面框架最常见的部件&#xff0c;当按下按钮的时候触发命令、执行某些操作或者回答一个问题&#xff0c;典型的按钮有OK&#xff0c;A…

对接西部数据Western Digital EDI 系统

近期我们为国内某知名电子产品企业提供EDI解决方案&#xff0c;采用知行之桥 EDI 系统作为核心组件&#xff0c;成功与西部数据Western Digital&#xff08;简称西数&#xff09;建立EDI连接&#xff0c;实现数据安全且自动化传输。 EDI实施需求 EDI连接 传输协议&#xff1a;A…

利用谷歌浏览器进行前端代码调试(JS,JSP)一

首先在浏览器打开需要调试的界面&#xff0c;按F12&#xff0c;打开调试窗口。 窗口常用的是界面上的四个&#xff1a;Elements&#xff0c;Console&#xff0c;Sources&#xff0c;Network&#xff0c;下面来介绍各个块的调试功能 1、Elements 这个通常用来调试界面的显示&a…

嵌入式学习笔记(15)再接S5PV210的启动过程

三星推荐方式&#xff1a; bootloader必须大于16KB小于96KB。假定bootloader为74KB&#xff0c;启动过程&#xff1a;开机&#xff0c;BL0运行&#xff0c;BLO加载外部启动设备中的bootloader前16KB&#xff08;BL1&#xff09;到SRAM中运行&#xff0c;BL1运行时会加载BL2(bo…

化繁为简 面板式空调网关亮相上海智能家居展 智哪儿专访青岛中弘赵哲海

面对中央空调协议不开放和智能家居协议不统一的问题&#xff0c;青岛中弘选择中央空调控制器这一细分赛道入局智能家居市场&#xff0c;始终贯彻“所有空调&#xff0c;一个网关”的产品技术理念&#xff0c;逐渐探索出一条中弘的发展路径和商业模式。 在2023年的SSHT上海国际智…

ModaHub魔搭社区开源AI Agent开发框架和评测

AI 模型社区魔搭(ModaHub)又上新了,推出适配开源大语言模型的 AI Agent 开发框架 ModaHub-Agent。借助 ModaHub-Agent,所有开发者都可基于开源 LLM 搭建属于自己的智能体应用,最大限度释放想象力和创造力。ModaHub-Agent 的代码现已开源。 AI Agent(AI 智能体、AI 代理)…

怎么把图片压缩小一点?

怎么把图片压缩小一点&#xff1f;如今是互联网的时代&#xff0c;图片已成为在我们的生活或者职场工作中占有非常重要的作用。我们经常需要在网络上上传图片&#xff0c;将它们发布在朋友圈、自媒体平台、电子商务平台、社交媒体或个人网站上展示。然而&#xff0c;如果图片体…

LeetCode(力扣)216. 组合总和 IIIPython

LeetCode216. 组合总和 III 题目链接代码 题目链接 https://leetcode.cn/problems/combination-sum-iii/ 代码 class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:result[]self.backtracking(n, k, 0, 1, [], result)return resultdef back…