手把手教你从分析到实现,王者荣耀壁纸爬虫!

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

一、分析需要爬取的网站

①、打开官方王者荣耀壁纸网站

 

②、快捷键F12,调出控制台进行抓包

③、找到正确的链接并分析

④、查看返回数据格式

⑤、解析url链接

⑥、查看url内容是否是所需图片,发现其实是缩略图

⑦、那就去分析网站,随便点开一张壁纸,查看指定格式的链接

⑧、找到目标地址

⑨、分析目标链接和缩略图的链接区别

  • 缩略图:http://shp.qpic.cn/ishow/2735090714/1599460171_84828260_8311_sProdImgNo_6.jpg/200
  • 目标图:http://shp.qpic.cn/ishow/2735090714/1599460171_84828260_8311_sProdImgNo_6.jpg/0
  • 可以知道,将指定格式的缩略图地址后面200替换成0就是目标真是图片

二、爬虫代码

①、至此,爬虫分析完成,爬虫完整代码如下

#!/usr/bin/env python# encoding: utf-8'''#-------------------------------------------------------------------#                   CONFIDENTIAL --- CUSTOM STUDIOS#-------------------------------------------------------------------##                   @Project Name : 王者荣耀壁纸下载##                   @File Name    : main.py##                   @Programmer   : Felix##                   @Start Date   : 2020/7/30 14:42##                   @Last Update  : 2020/7/30 14:42##-------------------------------------------------------------------'''import os, time, requests, json, refrom retrying import retryfrom urllib import parse class HonorOfKings:    '''     This is a main Class, the file contains all documents.     One document contains paragraphs that have several sentences     It loads the original file and converts the original file to new content     Then the new content will be saved by this class    '''    def __init__(self, save_path='./heros'):        self.save_path = save_path        self.time = str(time.time()).split('.')        self.url = 'https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi?activityId=2735&sVerifyCode=ABCD&sDataType=JSON&iListNum=20&totalpage=0&page={}&iOrder=0&iSortNumClose=1&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=%s' % self.time[0]     def hello(self):        '''        This is a welcome speech        :return: self        '''        print("*" * 50)        print(' ' * 18 + '王者荣耀壁纸下载')        print(' ' * 5 + '作者: Felix  Date: 2020-05-20 13:14')        print("*" * 50)        return self     def run(self):        '''        The program entry        '''        print('↓' * 20 + ' 格式选择: ' + '↓' * 20)        print('1.缩略图 2.1024x768 3.1280x720 4.1280x1024 5.1440x900 6.1920x1080 7.1920x1200 8.1920x1440')        size = input('请输入您想下载的格式序号,默认6:')        size = size if size and int(size) in [1,2,3,4,5,6,7,8] else 6         print('---下载开始...')        page = 0        offset = 0        total_response = self.request(self.url.format(page)).text        total_res = json.loads(total_response)        total_page = --int(total_res['iTotalPages'])        print('---总共 {} 页...' . format(total_page))        while True:            if offset > total_page:                break            url = self.url.format(offset)            response = self.request(url).text            result = json.loads(response)            now = 0            for item in result["List"]:                now += 1                hero_name = parse.unquote(item['sProdName']).split('-')[0]                hero_name = re.sub(r'[【】:.<>|·@#$%^&() ]', '', hero_name)                print('---正在下载第 {} 页 {} 英雄 进度{}/{}...' . format(offset, hero_name, now, len(result["List"])))                hero_url = parse.unquote(item['sProdImgNo_{}'.format(str(size))])                save_path = self.save_path + '/' + hero_name                save_name = save_path + '/' + hero_url.split('/')[-2]                if not os.path.exists(save_path):                    os.makedirs(save_path)                if not os.path.exists(save_name):                    with open(save_name, 'wb') as f:                        response_content = self.request(hero_url.replace("/200", "/0")).content                        f.write(response_content)            offset += 1        print('---下载完成...')     @retry(stop_max_attempt_number=3)    def request(self, url):        '''        Send a request        :param url: the url of request        :param timeout: the time of request        :return: the result of request        '''        response = requests.get(url, timeout=10)        assert response.status_code == 200        return response if __name__ == "__main__":    HonorOfKings().hello().run()

②、详细分析链接

  • 其实前端发送的是jsonp请求,这样的数据在python不好处理,因为不是标准的json格式
  • 因为其前面JQuery1710418919222这个字符串,而知道jsonp的请求的都知道,有这个前缀,必然请求链接中有相同的callback参数,将其删除即可
  • 因此我python代码中是删除了这个参数的
  • 这个链接还有很多参数,其实我觉得很多都可以删除,但是我懒得慢慢去试
  • 这个请求链接中最重要的一个参数必然就是页码数,也就是page这个参数,iListNum=20&totalpage=0&page={}
  • 上面的三个参数是可用的,一个是20,指每页的数量,totalpage估计没啥用,page抓包发现是从0开始的,这个需要注意一下,因为下面代码需要将总页数减1
self.url = 'https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi?activityId=2735&sVerifyCode=ABCD&sDataType=JSON&iListNum=20&totalpage=0&page={}&iOrder=0&iSortNumClose=1&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=%s' % self.time[0]

③、格式选择

  • 开始运行时,让你选择想下载格式的序号,为什么是8个格式呢,看原网页就知道了,8种不同分辨率的
  • 看上面的图片,缩略图链接有1-8,对应了8中分辨率的缩略图,那么原图必然也是8种
  • 这里我默认1920*1080的,一般电脑用这个分辨率的都可以
  • 其中1的原图,你自己试下,其实也是一个缩略图,所以一般下载选择2-8
print('↓' * 20 + ' 格式选择: ' + '↓' * 20)print('1.缩略图 2.1024x768 3.1280x720 4.1280x1024 5.1440x900 6.1920x1080 7.1920x1200 8.1920x1440')size = input('请输入您想下载的格式序号,默认6:')size = size if size and int(size) in [1,2,3,4,5,6,7,8] else 6

④、下载代码分析

  • 第一次请求主要是为了获取总页数,但是请求是从0开始为第一页,所以需要减去1
  • while true中就是开始从0循环去请求地址,先找到缩略图地址,然后将缩略图的地址链接200替换成0就是目标图片地址了
  • 如果名字中有特殊字符,就将其用正则去除,不然可能会影响路径的查找
print('---下载开始...')page = 0offset = 0total_response = self.request(self.url.format(page)).texttotal_res = json.loads(total_response)total_page = --int(total_res['iTotalPages'])print('---总共 {} 页...' . format(total_page))while True:    if offset > total_page:        break    url = self.url.format(offset)    response = self.request(url).text    result = json.loads(response)    now = 0    for item in result["List"]:        now += 1        hero_name = parse.unquote(item['sProdName']).split('-')[0]        hero_name = re.sub(r'[【】:.<>|·@#$%^&() ]', '', hero_name)        print('---正在下载第 {} 页 {} 英雄 进度{}/{}...' . format(offset, hero_name, now, len(result["List"])))        hero_url = parse.unquote(item['sProdImgNo_{}'.format(str(size))])        save_path = self.save_path + '/' + hero_name        save_name = save_path + '/' + hero_url.split('/')[-2]        if not os.path.exists(save_path):            os.makedirs(save_path)        if not os.path.exists(save_name):            with open(save_name, 'wb') as f:                response_content = self.request(hero_url.replace("/200", "/0")).content                f.write(response_content)    offset += 1print('---下载完成...')

⑤、爬虫运行的结果,相同名字的放在同一个文件夹下

 

王者荣耀】全英雄无水印皮肤下载器 名称:王者荣耀全英雄无水印皮肤下载器软件:由pyinstaller打包而成平台:win10 64位有效(其他请大家自测)效果:双击运行就自动下载王者荣耀全英雄无水印皮肤, 会新建一个img文件夹存放结果图:如果大家觉得有用的话就自取,顺便免费评分或者其他啥的直接上连接吧:蓝奏云:软件:https://www.lanzous.com/i9y4jhi 密码:1wtu(2.0版在下方)已经下... 阅读详情

相关推荐

Python一键获取所有高清无码王者皮肤图片

前言 突然看到王者荣耀每个英雄的图片很不错,所有就一张一张保存了. 分析 1.打开王者荣耀官方英雄列表 2.分析接口 3.实际操作 4.调整代码 5.开始启动程序 开始 其中中间发现,获取的页面中并没有直接找到图片的地址, 所以先拿到皮肤名称拼接成图片链接,然后真正拿到高清无码皮肤图片 # -*- coding: gbk -*-# # ------------------------------...

GMaya的博客 1万+

王者荣耀场景地图模型Unity3D

王者荣耀场景地图模型Unity3D,王者荣耀场景地图模型Unity3D

王者荣耀英雄皮肤图片爬取

王者荣耀英雄皮肤爬取

King 2241

python 爬虫 王者荣耀高清图片 代码分享

import os import requests import json url01=r'https://pvp.qq.com/web201605/js/herolist.json' url02=r'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/105/105-bigskin-1.jpg' if 'iamges' not in os.listdir(): os.makedirs('images') res = requests.g

weixin_47095925的博客 6791

下载王者荣耀高清壁纸

一共有两种下载方法,一种单线程下载,一种多线程下载,运行时须创建image文件夹

m0_65384516的博客 3139

手把手你从分析实现王者荣耀壁纸爬虫!表弟馋哭了!

一、分析需要爬取的网站 ①、打开官方王者荣耀壁纸网站 网站地址:https://pvp.qq.com/web201605/wallpaper.shtml ②、快捷键F12,调出控制台进行抓包 ③、找到正确的链接并分析 ④、查看返回数据格式 ⑤、解析url链接 ⑥、查看url内容是否是所需图片,发现其实是缩略图 ⑦、那就去分析网站,随便点开一张壁纸,查看指定格式的链接 ⑧、找到目标地址 ⑨、分析目标链接和缩略图的链接区别 缩略图:http://shp.qpic.

爬遍所有网站 908

Python爬虫---王者荣耀(最详细)

标题Python爬虫王者荣耀(最详细) 首先来到王者荣耀的首页 点击游戏壁纸进去,就会看到这些图片,大致看了一下,是我们想要的东西 点开图片看看能不能找到什么规律 可以看见每张图下面都有六个分辨率的选项,我们点两个进去看看 19201080的点开,图片很清晰。我们再点一个其他分辨率的 这个是1024768的 我们来看一下url的区别在哪里 1920*1080的url:http://shp.qpic.cn/ishow/2735120117/1606814547_84828260_690_sPr

我的博客 1万+

王者荣耀壁纸上面的英雄太酷了,为什么不把它们下载下来呢?

前一段时间,看了一下王者荣耀的官网,觉得上面的壁纸不错,就准备把它们用爬虫下载下来,今天刚好有时间,就写了这篇博客,希望大家喜欢。

坚持不懈的大白的博客 4011

王者荣耀爬虫

绪论 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。所以用python进行网络爬虫是简单且快捷的。 需求分析 本...

KIDD5433的博客 1万+

Python爬虫实战,requests模块,Python实现抓取王者荣耀全套皮肤

前言 今天带大家爬取王者荣耀全套皮肤,废话不多说,直接开始~ 开发工具 Python版本: 3.6.4 相关模块: requests模块; urllib模块; 以及一些Python自带的模块。 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可。 思路分析 1、打开官方王者荣耀壁纸网站 网站地址:https://pvp.qq.com/web201605/wallpaper.shtml 2、快捷键F12,调出控制台进行抓包 图片 3、找到正确的链接并分析 图片 4、查看返回数据格式 图片

weixin_43649691的博客 5917

手把手你使用Python网络爬虫获取王者荣耀英雄皮肤

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤欢度国庆,共度中秋。/1 前言/王者荣耀,想必大家都玩过或听过,...

pdcfighting的博客 3716

python手机壁纸超清_Python爬虫-王者荣耀高清壁纸下载

绪论网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。所以用python进行网络爬虫是简单且快捷的。需求分析本次的练...

weixin_39996096的博客 987

Python你一键获得【王者荣耀全皮肤】~~~

额,不好意思标题后面少了"高清壁纸"几个字,既然进来了也应该不亏,本文一键撸取427张王者荣耀皮肤高清壁纸并且打包好了,文末查看获取方式。并且手把手你撸取所有壁纸的全过程。 开篇 前几天看到同事的桌面壁纸王者荣耀的炫酷后羿皮肤,觉得十分帅气,于是想自己也弄一个,可是王者皮肤这么多一个个点网页找太费劲,何不一把撸下来一起看呢,于是想着把所有的英雄皮肤都下载到本地的一个目录下面慢慢选多好,说干就干…那我们就开始吧。 网页分析 首先,我们进去王者荣耀官网,点进“英雄资料”界面: 按F12打开调试台,随便点击

阿旭的博客 1389

爬虫实战|欢迎来到王者荣耀

爬虫是一门有趣的技术,它可以让我们感受到程序的魅力,给我们带来视觉冲击感和成就感,可以极大地提高我们对编程的学习兴趣。 —————————————————————————————————————— 愿你我,都能: 遵循君子协议 合理使用技术 提高学习兴趣 今天咱们来玩一把王者荣耀。首先咱们打开王者荣耀官网: 王者荣耀​pvp.qq.com 进去之后可以看到里面有许多英雄高清皮肤壁纸 于是我就想把这些英雄皮肤的壁纸统统给扒拉到本地。首先咱们如下找到所有的英雄,再找到他们对应的皮肤 .

qq_36807888的博客 881

如何爬取王者荣耀高清壁纸(详细分析程)

1、准备工作 Python 3.7 Python安装有requests模块 王者荣耀官网地址:https://pvp.qq.com/web201605/wallpaper.shtml### 2、网站分析 由于现在的电脑分辨率基本都是1920x1080,所以这里以此分辨率作为例子 2.1、首先我们分析同一图片,不同分辨率的图片,我们对比他们的...

qq_40981137的博客 8729

爬虫 jsonp_python爬虫实战手把手你从分析实现王者荣耀壁纸爬虫

泰迪学院公众号ID:taidixueyuan一、分析需要爬取的网站1.打开官方王者荣耀壁纸网站:https://pvp.qq.com/web201605/wallpaper.shtml2.快捷键F12,调出控制台进行抓包3.找到正确的链接并分析4.查看返回数据格式5.解析url链接6.查看url内容是否是所需图片,发现其实是缩略图7.那就去分析网站,随便点开一张壁纸,查看指定格式的链接8...

weixin_39911998的博客 174

Python零基础之爬取王者荣耀官方网站高清壁纸(普通版)

Python零基础之爬取王者荣耀官方网站高清壁纸目标:分析过程:1. 确定目标url2. 解决url解析问题3. 图片下载解析4. 多页面的处理代码示例需要注意的问题: 目标: 1.下载王者荣耀网站游戏壁纸的高清壁纸 2.把同一个名称的壁纸放到同一个文件夹 分析过程: 1. 确定目标url 访问https://pvp.qq.com/web201605/wallpaper.shtml 发现图片地址并不在网页html源码中,检查浏览器,分析network。发现目标url有可能是: https://

kingx3的博客 5954
上一篇: 为什么我们要学Python及基础语法详解,因为必须会它才能学Python!
下一篇: 10行python代码制作笑死人不偿命的倒放gif!属实魔性
pythonlaodi
博客等级 码龄6年 286粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值