作为python新手上路的小白,今天我来给大家安利一个爬取王者荣耀官方网站皮肤壁纸的项目,请大家多多关照!

一、登陆官网

首先我们登录王者荣耀官网,在菜单栏点击进入皮肤壁纸高清图可以看到以下画面:

通过按键F12查看网页元素我们可以看到网页对应的URL地址:

所以接下来我们将路径初始化并且定义一个请求函数,此函数用来处理调用并返回每一页URL:

#初始化路径def __init__(self, save_path='./英雄'):self.save_path = save_pathself.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 request(self, url):#发送一个请求#请求的标签#请求的时间#返回的结果'''Send a request:param url: the url of request:param timeout: the time of request:return: the result of request'''response = session.get(url, timeout=10)#必须在10秒钟内反应,否则报错assert response.status_code == 200#判断服务器对响应结果的请求,若状态码为200,则继续处理    return response

二、选择分辨率

由于一共有多页,每页有大概二十张皮肤壁纸,由上面的图片我们可以看到每张皮肤壁纸下面又有8种格式的分辨率,因此,为了能够自行选择下载想要的分辨率,我们找到相应的代码段,如下:

sProdImgNo_1: "https%3A%2F%2Fshp%2Eqpic%2Ecn%2Fishow%2F2735122214%2F1640154186%5F1265602313%5F35509%5FsProdImgNo%5F1%2Ejpg%2F200"
sProdImgNo_2: "https%3A%2F%2Fshp%2Eqpic%2Ecn%2Fishow%2F2735122214%2F1640154186%5F1265602313%5F35509%5FsProdImgNo%5F2%2Ejpg%2F200"
sProdImgNo_3: "https%3A%2F%2Fshp%2Eqpic%2Ecn%2Fishow%2F2735122214%2F1640154187%5F1265602313%5F35509%5FsProdImgNo%5F3%2Ejpg%2F200"
sProdImgNo_4: "https%3A%2F%2Fshp%2Eqpic%2Ecn%2Fishow%2F2735122214%2F1640154187%5F1265602313%5F35509%5FsProdImgNo%5F4%2Ejpg%2F200"
sProdImgNo_5: "https%3A%2F%2Fshp%2Eqpic%2Ecn%2Fishow%2F2735122214%2F1640154187%5F1265602313%5F35509%5FsProdImgNo%5F5%2Ejpg%2F200"
sProdImgNo_6: "https%3A%2F%2Fshp%2Eqpic%2Ecn%2Fishow%2F2735122214%2F1640154187%5F1265602313%5F35509%5FsProdImgNo%5F6%2Ejpg%2F200"
sProdImgNo_7: "https%3A%2F%2Fshp%2Eqpic%2Ecn%2Fishow%2F2735122214%2F1640154187%5F1265602313%5F35509%5FsProdImgNo%5F7%2Ejpg%2F200"
sProdImgNo_8: "https%3A%2F%2Fshp%2Eqpic%2Ecn%2Fishow%2F2735122214%2F1640154188%5F1265602313%5F35509%5FsProdImgNo%5F8%2Ejpg%2F200"
sProdName: "%E9%95%9C%2D%E5%8C%BF%E5%85%89%E8%BF%BD%E5%BD%B1%E8%80%85%E5%A3%81%E7%BA%B8"

以上代码段就是各个分辨率的百分比编码格式,为了将其和相应的英雄名称进行解码,我们从urllib库引入parse模块实现分辨率的选择下载功能:

import os
import requests
import json
import re
from retrying import retry
from urllib import parse
def run(self):'''The program entry'''print('↓' * 20 + ' 格式选择: ' + '↓' * 20)print("\n")#各种格式分辨率和尺寸print('1.缩略图 2.1024x768 3.1280x720 4.1280x1024 5.1440x900 6.1920x1080 7.1920x1200 8.1920x1440')print("\n")size = input('请输入想要下载的图片分辨率序号:')print("\n")print('开始下载英雄皮肤...')print("\n")page = 0offset = 0#从第0页开始下载#调用request函数返回相应的页数的urltotal_response = self.request(self.url.format(page)).text#将json格式数据转换为字典total_res = json.loads(total_response)total_page = --int(total_res['iTotalPages'])a=input("请问是否下载全皮肤?:")print("\n")if str(a) == "是":print('--总共 {} 页...' . format(total_page))while True:if offset > total_page:breakurl = self.url.format(offset)response = self.request(url).textresult = json.loads(response)now = 0for item in result["List"]:now += 1hero_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))])#选择相应的尺寸和图片分辨率进行下载

以上是通过选择分辨率下载每一页所有皮肤的函数选择功能,接下来如果我们要下载指定英雄的对应皮肤,就要进行英雄名称判断代码段如下:

#指定想要下载相应英雄的皮肤if hero_name == str(b):print('---正在下载{}的皮肤...' . format(str(b)))#指定下载输入的英雄名对应的皮肤hero_url = parse.unquote(item['sProdImgNo_{}'.format(str(size))])#选择相应的尺寸和图片分辨率进行下载

三、创建路径:

我们建立一个与对应英雄名相同的路径和文件夹名称:

 #判断是否存在路径和文件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")).contentf.write(response_content)

四、运行效果:

全部代码:

import time
import datetime
import os
import requests
import json
import re
from retrying import retry
from urllib import parse
from bs4 import BeautifulSoup#使代码总体保持一致
session=requests.session()#定义王者荣耀类
class HonorOfKings:#定义一个主类,该文件包含所有文档#一个文档包含多个句子的段落#它加载原始文件并将原始文件转换为新内容#然后这个类将保存新内容'''This is a main Class, the file contains all documents.One document contains paragraphs that have several sentencesIt loads the original file and converts the original file to new contentThen the new content will be saved by this class'''#初始化路径def __init__(self, save_path='./英雄'):self.save_path = save_pathself.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 request(self, url):#发送一个请求#请求的标签#请求的时间#返回的结果'''Send a request:param url: the url of request:param timeout: the time of request:return: the result of request'''response = session.get(url, timeout=10)#必须在10秒钟内反应,否则报错assert response.status_code == 200#判断服务器对响应结果的请求,若状态码为200,则继续处理    return response#定义一个欢迎函数,面向开发者打招呼 def hello(self):'''This is a welcome speech:return: self'''print("*" * 50)print(' ' * 18 + '王者荣耀壁纸下载')print(' ' * 5 + '作者: 廖思轲 Date: {}'.format(datetime.datetime.now()))print("*" * 50)return self#定义执行函数 def run(self):'''The program entry'''print('↓' * 20 + ' 格式选择: ' + '↓' * 20)print("\n")#各种格式分辨率和尺寸print('1.缩略图 2.1024x768 3.1280x720 4.1280x1024 5.1440x900 6.1920x1080 7.1920x1200 8.1920x1440')print("\n")size = input('请输入想要下载的图片分辨率序号:')print("\n")print('开始下载英雄皮肤...')print("\n")page = 0offset = 0#从第0页开始下载#调用request函数返回相应的页数的urltotal_response = self.request(self.url.format(page)).text#将json格式数据转换为字典total_res = json.loads(total_response)total_page = --int(total_res['iTotalPages'])a=input("请问是否下载全皮肤?:")print("\n")if str(a) == "是":print('--总共 {} 页...' . format(total_page))while True:if offset > total_page:breakurl = self.url.format(offset)response = self.request(url).textresult = json.loads(response)now = 0for item in result["List"]:now += 1hero_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_namesave_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")).contentf.write(response_content)offset += 1print('--下载完成...')elif str(a) == "否":b=input("请输入你想下载的英雄名:")print("\n")while True:if offset > total_page:breakurl = self.url.format(offset)response = self.request(url).textresult = json.loads(response)now = 0for item in result["List"]:now += 1hero_name = parse.unquote(item['sProdName']).split('-')[0]#将百分比编码序列解码hero_name = re.sub(r'[【】:.<>|·@#$%^&() ]', '', hero_name)#重新加载英雄名字#指定想要下载相应英雄的皮肤if hero_name == str(b):print('---正在下载{}的皮肤...' . format(str(b)))#指定下载输入的英雄名对应的皮肤hero_url = parse.unquote(item['sProdImgNo_{}'.format(str(size))])#选择相应的尺寸和图片分辨率进行下载#创建路径和文件名save_path = self.save_path + '/' + str(b)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")).contentf.write(response_content)offset += 1print("下载完成...")else:print("Request with Error!")if __name__ == "__main__":HonorOfKings().hello().run()

利用python爬取王者荣耀皮肤壁纸相关推荐

  1. python爬取王者荣耀皮肤高清图

    python爬取王者荣耀皮肤高清图 前期准备,导入模块 requests json os 进入王者荣耀官网,进入游戏壁纸页面,f12进入开发者模式,按照下图找到这个json文件,用于对图片的数据请求. ...

  2. Python爬取王者荣耀皮肤

    引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了.我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成. 准备工 ...

  3. 多线程爬取王者荣耀皮肤壁纸

    今天写了个小demo,多线程爬取王者荣耀全皮肤,话不多说,直入主题. https://pvp.qq.com/web201605/herolist.shtml这个是玩王者荣耀官网上的英雄列表,这个时候一 ...

  4. python爬取王者皮肤别人可以看见效果吗_利用python爬取王者荣耀英雄皮肤图片

    前两天看到同学用python爬下来LOL的皮肤图片,感觉挺有趣的,我也想试试,于是决定来爬一爬王者荣耀的英雄和皮肤图片. 然后,简单的分析一下结构,看看是否有反爬机制. 之后,在上网查阅资料后,发现所 ...

  5. 利用Python爬取王者荣耀英雄皮肤!

    image 0.引言 作为一款现象级游戏,王者荣耀,想必大家都玩过或听过,游戏里中各式各样的英雄,每款皮肤都非常精美,用做电脑壁纸再合适不过了.本篇就来教大家如何使用Python来爬取这些精美的英雄皮 ...

  6. python爬取王者荣耀皮肤集

    一.英雄名对应英雄链接 依赖库导入 from selenium import webdriver 获取网页源代码 driver = webdriver.Chrome('D:\\数据分析\\chrome ...

  7. Python爬取王者荣耀全英雄全皮肤图片

    Python爬取王者荣耀全英雄全皮肤图片 前言 思路 分析 编码 案例源码 附图 总结 前言 以前写过类似的博客,利用Java爬取王者荣耀全英雄全皮肤图片,当时是利用 jsoup包来对目标网页进行解析 ...

  8. Python爬取 | 王者荣耀英雄皮肤海报

    这里只展示代码,具体介绍请点击下方链接. Python爬取 | 王者荣耀英雄皮肤海报 import requests import re import os import time import wi ...

  9. python 爬取王者荣耀高清壁纸

    代码地址如下: http://www.demodashi.com/demo/13104.html 一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 ...

最新文章

  1. 代码错误信息,微信报错
  2. Reference resources
  3. 读PPPOE/PPPOA白皮书小结
  4. 纷享车链AutoChain首创之数据保险柜的解读
  5. javascript --- js中的事件
  6. 月薪多少_教师月薪多少?全国各地教师工资表来了
  7. Redis 的 string
  8. 被劝退的准中年人日记——劝退后第一天
  9. MITRE 发布“2021年最重要的硬件弱点”榜单
  10. python如何读取csv文件中的某一张表_python 读取csv文件中某一段月份中的数据?...
  11. BAT54C那些事儿
  12. 计算机网络考研常见 复试题总结
  13. android手机usb设置在哪里,手机usb调试在哪,教您安卓手机怎么打开USB调试
  14. IOS开发之——硬件开发-传感器概述(01)
  15. android+widget日历开发,安卓日历小部件源码(AppWidgetProvider)
  16. Span 介绍及使用(一)
  17. SpaceSyntax【空间句法】之DepthMapX学习:第一篇 数据的输入 与 能做哪些分析
  18. python爬虫爬取网页壁纸图片(《底特律:变人》)
  19. egret可以用php做后端吗,Egret引擎开发指南之创建项目_node.js
  20. sparse_to_dense()和sparse_tensor_to_dense()的用法

热门文章

  1. Mac 与PC键盘的对比及快捷键(黑苹果)
  2. 记录css实现边框渐变色
  3. 提高信息系统的安全防护能力,一篇文章带你了解等保测评的重要性
  4. 2020年第三季度的垃圾邮件和网络钓鱼攻击分析
  5. biabiamiamia百度音乐网批量歌曲下载工具
  6. linux不识别ntfs分区,解决linux 不能识别ntfs分区问题(linux系统挂载移动硬盘)
  7. 项目mysql数据导入数据的Java程序
  8. 网络神经科学 Network neuroscience
  9. android推送设置功能
  10. 关于《完全用Linux工作》的思考