python爬虫入门 ✦ 下载王者荣耀全皮肤(高清壁纸)

此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。
本文章纯野生,无任何借鉴他人文章及抄袭等。

前言

  • 前面太啰嗦,建议直接观看攻略 (即代码)。
  • 近来初接触爬虫,总想着捣鼓一些小玩意。这不,有了这一篇文章。
  • 我敢打包票说,你肯定找不到另一篇关于王者荣耀下载高清壁纸的博文比这一篇更为详细。
  • 说到王者荣耀,相信大家都不会陌生 ,所以,本文章是讲解利用Python实现下载所有的王者荣耀的高清壁纸。

python爬虫入门 ✦ 下载王者荣耀全皮肤(高清壁纸)_第1张图片

  • 记得前段时间,常常会听到,开黑吗?我露娜贼6?
  • 我的露娜确实也很不错,但是我的蔡文姬打野更胜一筹。

python爬虫入门 ✦ 下载王者荣耀全皮肤(高清壁纸)_第2张图片

  • 闲聊完毕,下面要开始进入正题。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
本次分四个小点:

  • 未完成)开始游戏
  • 未完成)拿下一血 First Blood
  • 未完成)成功超神 Legendary
  • 未完成)摧毁敌方水晶 Victory

1. 开始游戏

  • 欢迎来到王者荣耀,敌军还有五秒到达战场
  1. 首先用浏览器打开王者荣耀官方网站,点击游戏壁纸

  2. 进入壁纸界面后,看到页面的新英雄新皮肤4张壁纸,高清壁纸20张壁纸,并且有多页壁纸,这里需要下载的是高清壁纸。壁纸共有20页,每页有20个壁纸。即20*20=400张壁纸。

  3. 开始游戏了,看看如何去取得一血(First Blood)。

2. 拿下一血 First Blood

  1. 看到源码这里,p_newhero_item 这一个类对应了页面的高清壁纸。刚好20个类和20张壁纸

  2. 点击一下貂蝉该壁纸,发现它有7种不同大小的尺寸或说是分辨率。再看到右边的源码,对应尺寸的图片链接都在里源码里面了。那7个尺寸的壁纸共就400*7=2800张了。

  3. 这里随意点击了一张壁纸的链接,发现页面跳转到对应尺寸的图片。

  4. 初战告捷,成功拿下一血。
    python爬虫入门 ✦ 下载王者荣耀全皮肤(高清壁纸)_第3张图片

  • 现在已经知道了图片的链接(即url)是如何获取的,那接下来就看一看他的不同页面之间有什么规律。

3. 成功超神 Legendary

  1. 前面5页的url如下,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=19&iOrder=0&iSortNumClose=1&jsoncallback=&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735
第二页 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=1&page=19&iOrder=0&iSortNumClose=1&jsoncallback=&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735
第三页 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=2&page=19&iOrder=0&iSortNumClose=1&jsoncallback=&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735
第四页 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=3&page=19&iOrder=0&iSortNumClose=1&jsoncallback=&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735
第五页 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=4&page=19&iOrder=0&iSortNumClose=1&jsoncallback=&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735
  1. 通过上面的5个url可以得出规律,url的变化点在page这里,第一页为0,每递增一页的page则 +1
  2. 来看看链接是如何获取到的。在页面打开开发者工具。每点击下一页,便会出现31个数据包。其中有1个为页面的链接,剩下的30个皆为壁纸缩略图的数据包。

  1. 到这里已经成功超神,因为对网站的解析已经完成了。任务也就完成80%了。

  • 接下来到推塔部分了,就是要写代码了。

4. 摧毁地方水晶 Victory

  • 到了这里,胜负快要分晓了。
  • 看完祭出终极攻略,干翻他们。

4.1 完整攻略

攻略这里可能不是描述的那么详细,但是实践出真知嘛。如果你不行(对!就是不行),可以在下方留言或者给我私信哈。

这里放出一个王者荣耀壁纸尺寸图片链接的对应关系。

  • 通过观看下表可以发现,url的变化在.jpg 前面的数字,
  • 随着壁纸尺寸的增长,链接中对应的数字就递增的+1
  • 别问我是如何发现这个规律的,问就是找了两个多小时。
壁纸尺寸 图片链接
1024x768 http://shp.qpic.cn/ishow/xxx_sProdImgNo_2.jpg/0
1280x720 http://shp.qpic.cn/ishow/xxx_sProdImgNo_3.jpg/0
1280x1024 http://shp.qpic.cn/ishow/xxx_sProdImgNo_4.jpg/0
1440x900 http://shp.qpic.cn/ishow/xxx_sProdImgNo_5.jpg/0
1920x1080 http://shp.qpic.cn/ishow/xxx_sProdImgNo_6.jpg/0
1920x1200 http://shp.qpic.cn/ishow/xxx_sProdImgNo_7.jpg/0
1920x1440 http://shp.qpic.cn/ishow/xxx_sProdImgNo_8.jpg/0
# -*- coding: utf-8 -*-
# @Time    : 2020/1/9 18:13
# @User    : Admin
# @Author  : SunriseCai
# @File    : Wangzherongyao_spider.py
# @IDE     : PyCharm

import json
import requests
from queue import Queue
from urllib import parse


class DownloadPicture(object):
	def __init__(self):
		self.Pageurl = 'https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi?activityId=2735&sVerifyCode=ABCD&s' \
		               'DataType=JSON&iListNum=20&totalpage=0&page={}&iOrder=0&iSortNumClose=1&jsoncallback=&iAMSActivityId=51991' \
		               '&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735'
		self.headers = {
			'Referer': 'https://pvp.qq.com/web201605/wallpaper.shtml',
			'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'
		}
		self.q_ = Queue()
		self.picture_url_list = []
		self.size_num_contrast = ['1024x768', '1280x720', '1280x1024', '1440x900', '1920x1080', '1920x1200',
		                          '1920x1440']
	# 获取所有页面的链接
	def get_page_url(self):
		for page in range(1):
			print(self.Pageurl.format(page))
			self.get_picture_url(self.Pageurl.format(page))

	def get_picture_url(self, Pageurl):
		res = requests.get(url=Pageurl, headers=self.headers)
		res = json.loads(res.text)

		for data in res['List']:
			name = parse.unquote(data['sProdName'])
			for num in range(2, 9):
				self.picture_url_list.append(parse.unquote(data['sProdImgNo_{}'.format(num)])[:-3] + '0')
			self.q_.put([name, self.picture_url_list])
			self.picture_url_list = []

	def download_picture(self):
		while True:
			if not self.q_.empty():
				url_data = self.q_.get()
				name = url_data[0]
				for picture_url, size in zip(url_data[1], self.size_num_contrast):
					resp = requests.get(picture_url, headers=self.headers)
					with open('%s_%s.jpg' % (name, size), 'wb') as f:
						f.write(resp.content)
						f.close()
						print('图片:%s_%s.jpg 下载成功' % (name, size))
			else:
				break

	def main(self):
		self.get_page_url()
		self.download_picture()

if __name__ == '__main__':
	spider = DownloadPicture()
	spider.main()
  • 至此,游戏通关。已摧毁对方水晶。

幸不辱命,本次攻略将地方杀的片甲不留,已成功拿下比赛。

  • 已完成)开始游戏
  • 已完成)拿下一血 First Blood
  • 已完成)成功超神 Legendary
  • 已完成)摧毁敌方水晶 Victory

python爬虫入门 ✦ 下载王者荣耀全皮肤(高清壁纸)_第4张图片

  • 来看一下攻陷对方水晶后的战利品。怎么样,有意思吧!!


最后祝愿各位玩家都可以升到那传说中的嘴强王者,也欢迎大家和我一起开黑哦。我蔡文姬打野賊6
python爬虫入门 ✦ 下载王者荣耀全皮肤(高清壁纸)_第5张图片

5.结语

本次王者荣耀高清壁纸下载属于一个简单的程序,在代码实现过程中没有遇到问题。

你还楞再这里做什么??赶紧复制黏贴代码去执行啊!

好了,本次的分享到这里结束。

有任何疑问欢迎在下方留言哦。

你可能感兴趣的:(python爬虫入门 ✦ 下载王者荣耀全皮肤(高清壁纸))