Python零基础之爬取王者荣耀官方网站高清壁纸

  • 目标:
  • 分析过程:
    • 1. 确定目标url
    • 2. 解决url解析问题
    • 3. 图片下载解析
    • 4. 多页面的处理
  • 代码示例
  • 需要注意的问题:

目标:

  • 1.下载王者荣耀网站游戏壁纸的高清壁纸
  • 2.把同一个名称的壁纸放到同一个文件夹

分析过程:

1. 确定目标url

  • 访问https://pvp.qq.com/web201605/wallpaper.shtml

  • 发现图片地址并不在网页html源码中,检查浏览器,分析network。发现目标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=0&iOrder=0&iSortNumClose=1&jsoncallback=jQuery17105576461901361978_1597489598391&iAMSActivityId=51991&everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&=1597489758464
  • 删掉&jsoncallback回调函数部分的内容,此时可以返回json数据

  • 所以目标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=0&iOrder=0&iSortNumClose=1&iAMSActivityId=51991&everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&=1597489758464
  • 通过json.cn格式化代码,发现其中含有jpg的地址信息

  • 如:

    • “http%3A%2F%2Fshp%2Eqpic%2Ecn%2Fishow%2F2735081209%2F1597196301%5F84828260%5F17286%5FsProdImgNo%5F1%2Ejpg%2F200”
  • http地址经过了编码,需要解码还原jpg地址

  • 同时发现’sProdName’对应的为图片名称,也需要解码

2. 解决url解析问题

  • 尝试利用urllib里边的parse.unquote解码地址
from urllib import parsebase_url = "http%3A%2F%2Fshp%2Eqpic%2Ecn%2Fishow%2F2735081209%2F1597196301%5F84828260%5F17286%5FsProdImgNo%5F1%2Ejpg%2F200"# 解析url
url = parse.unquote(base_url,encoding='utf-8')print(url)
  • 输出为:

http://shp.qpic.cn/ishow/2735081209/1597196301_84828260_17286_sProdImgNo_1.jpg/200

3. 图片下载解析

  • 注意到/200都是缩略图,大图需要改成/0

http://shp.qpic.cn/ishow/2735081209/1597196301_84828260_17286_sProdImgNo_1.jpg/0

4. 多页面的处理

  • 爬取多页需要修改url的&page参数,第一页默认0,以此类推

代码示例

import requests
from urllib import parse
import os
from urllib import request# 添加请求头U-A和referer,避免反爬
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36','referer': 'https://pvp.qq.com/web201605/wallpaper.shtml'}# 定义一个函数来获取每张图片的url
def extract_images(data):image_urls = []for x in range(1, 9):# 每组图片共8张,通过这种方式获取一组照片的所有地址# 通过.unquote解码地址,并且替代末尾的'200'为'0'image_url = parse.unquote(data['sProdImgNo_%d' % x]).replace('/200', '/0')image_urls.append(image_url)return image_urlsdef page_url_list(base_url):page_urls = []for i in range(23):base_page_url = base_url.format(str(i))page_urls.append(base_page_url)# print(page_urls)return page_urlsdef main():# 确认页面url地址base_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&_=1597489758464k'page_urls = page_url_list(base_url)for page_url in page_urls:resp = requests.get(page_url, headers=headers)# 获取的是一个json类型的字符串# print(resp.text)# 可以通过.json()直接处理,替代json.loads()# print(type(resp.json()),resp.json())# 返回的是一个字典,可以通过K-V取值result = resp.json()datas = result['List']for data in datas:# 通过图片地址处理函数处理列表数据image_urls = extract_images(data)# 获取图片的名称,由于要按照文件名创建目录,所以要对空格进行处理name = parse.unquote(data['sProdName']).strip()# print('-' * 70)# print(name)# print('-' * 70)# print(image_urls)# print('-' * 70)# 先创建一个用来存放image的主目录# 当文件夹不存在时创建,当存在时跳过if os.path.exists('./image') == False:os.mkdir('image')else:pass# 创建一个文件夹./image/name/# 创建路径dirpath = os.path.join('image',name)# 按照路径创建文件夹os.mkdir(dirpath)# 下载图片# 注意index索引值写前边for index,image_url in enumerate(image_urls):# request.urlretrieve(,)传参地址和路径,就可以保存图片# 每个图片的地址是不同的,按照保存路径,图片名称,和索引+1以及文件类型名称的路径保存request.urlretrieve(image_url,os.path.join(dirpath,name+'%d.jpg' % (index + 1)))print(name,'%s下载成功' % image_url)if __name__ == '__main__':main()

需要注意的问题:

  1. url分析时,找到对应url后,需要根据反馈结果在www.json.cn查看是否能够正常解析
  2. 发现图片地址格式和图面名称不正常,可以通过urllib.parse.unquote()解码成正常数据
  3. 图片地址修改时,不能只把200改成0,要防止url地址中出现200,所以改/200为/0出错的可能性会更小一点。当然也可以通过re正则从后端匹配修改,会更为稳妥
  4. 文件名中如果有空格,创建文件夹会报错,所以要用strip()处理; 文件名可能还有全角字符等,也需要进行处理(代码中未写全角字符的处理)
  5. 文件路径可以通过引入os,利用os.path.join()链接路径
  6. 文件夹创建使用os,mkdir(),可以利用os.path.exists()判断文件夹是否存在,如果不存在再创建,可以避免文件夹已存在的错误
  7. 多页的数据获取可以尝试修改&page=的数值
  8. 图片下载使用urllib.request.urlretrieve()比较简介只需要传入url和存储地址(含文件名)就可以了
  9. 图片保存的文件名可以利用enumerate()里的index值作为后缀添加;注意不要遗漏文件类型(本文为.jpg)
    10.存储过程中,还要注意,如果url中有多个地址重复,保存时会提示文件已存在时无法创建文件等错误,还可以加入异常处理,或者文件是否存在的判断等(代码示例中不含该部分代码)

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

  1. 教你用PHP爬取王者荣耀英雄皮肤高清壁纸(附源码)

    午饭后看到一篇文章关于"用Python爬取王者荣耀官网的英雄皮肤图片",于是顺手用PHP也写了一个,在这里给大家分享一下,贴出源码: //下载王者荣耀皮肤图片 public fun ...

  2. 一键爬取王者荣耀全皮肤高清图片【方法一】

    文章目录 前言 一.爬虫是什么? 二.使用步骤 1.引入库 2.访问的URL 3.爬取思路 三.皮肤URL(需要手动找出) 完整代码 四.效果展示 总结 前言 相信很多小伙伴们都喜欢玩王者荣耀这款MO ...

  3. 一键爬取王者荣耀全皮肤高清图片【方法二】

    爬取王者荣耀官网皮肤[爬虫] 上次我们讲了爬虫的定义以及爬取王者荣耀皮肤的思路. 今天我们换一种方式来爬取同样的内容.大体上思路和方法一相同. 方法一传送门:方法一 方法二 # 网址:https:// ...

  4. python爬取王者皮肤_Python爬取王者荣耀英雄皮肤高清图片

    前言 临下班前,看到群里有人在讨论用王者农药的一些皮肤作为电脑的壁纸,什么高清的,什么像素稍低的,网上查了一手,也有,但像素都不一样,所以,我就想着,自己去官网直接爬他的高清皮肤就好了,然后就有了这边 ...

  5. python爬取王者荣耀全皮肤高清无水印图片

    前期准备:安装requests库,我猜你可能需要: Python网络爬虫与信息提取笔记01-Requests库入门 Windows下安装pip和换源 import os import requests ...

  6. Python爬虫爬取王者荣耀英雄人物高清图片

    Python爬虫爬取王者荣耀英雄人物高清图片 实现效果: 网页分析 从第一个网页中,获取每个英雄头像点击后进入的新网页地址,即a标签的 href 属性值: 划线部分的网址是需要拼接的 在每个英雄的具体 ...

  7. 运用python爬取彼岸桌面所有关键字高清壁纸

    运用python爬取彼岸桌面所有关键字高清壁纸 第一次在csdn写博客, 个人技术并不成熟, 还是学生, 高手轻喷菜鸡勿啄 就是心血来潮想要换桌面壁纸, 存在一个文件夹自动更换, 但是从网站上一个一个 ...

  8. Python爬虫教程:爬取王者荣耀全套皮肤【附源码】

    怎么获取全套皮肤?用钱买,或者用爬虫爬取下来~虽然后者不能穿.这个案例稍微复杂一点,但是一个非常值得学习的项目. 具体实现思路: 分析网页源代码结构 找到合适的入口 穷举访问并解析 爬取所有英雄所有皮 ...

  9. python 20行代码爬取王者荣耀全英雄皮肤

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

最新文章

  1. STM32 基础系列教程 25 - USB_HID_mouse
  2. 基于消息的分布式架构设计
  3. 三国志战略版360区S4服务器合并信息,三国志战略版pk赛季怎么转区?s4转区规则[多图]...
  4. 抗侧力构件弹性位移如何计算_说一说现在很火的装配式建筑怎么计算?
  5. Debian操作系统的源配置信息详解--Source.list配置文件详解
  6. UMHexagonS算法优化
  7. python解二阶微分方程组_用Python求解一阶和二阶微分方程组
  8. 项目工作说明书(SOW)
  9. word表格转图片线条不会缺失方法
  10. 垃圾食品对身体的影响可不仅仅是减慢新陈代谢这么简单
  11. 1+X计算机视觉考证一些知识点
  12. 【电脑操作】【鼠标】无线鼠标无反应怎么办?
  13. 嘉兴 机器人仓库 菜鸟_菜鸟在嘉兴推出全新智能仓 在“双11”启用超级机器人仓群...
  14. 216:vue+openlayers 加载GPX数据,导出geojson文件
  15. PHP面向对象开发:类成员的相关知识
  16. 桌面动态壁纸 wallPaper engine
  17. 点评中国互联网CEO语录
  18. 两种方法快速打开Chrome浏览器
  19. 在Exchange Server 2007中限制部分用户只能收发内部邮件 1
  20. 王唯佳被南开计算机学院录取,“庞贝病”男生高考662分,已被南开大学录取

热门文章

  1. UE4如何制作小地图
  2. 名著赏读 | 治理的前提,读《学术权力》
  3. 网页制作,前端基础展示图片和文档
  4. STM32 寄存器位操作详解
  5. 微信小程序跳转外部网站
  6. 初级项目经理和高级项目经理的区别
  7. amd系统下装matlab,AMD平台下安装运行MATLAB的设置
  8. 迪普科技为公安部身份证查询系统“分压解忧”
  9. vue build报错 精辟
  10. java csv导出 乱码_java导出csv乱码解决方法介绍