Python+Fiddler5带你爬取6000+高清王者荣耀cosplay图

Python+Fiddler5带你爬取6000+高清王者荣耀cosplay图

写在前面

最近在玩蛇的时候发现一个抓包神器Fiddler,简直不要太好用,于是当作练手就把这软件给安排了,王者荣耀盒子一个很古老的软件,打开界面看到上次更新还是在2020年8月,可能制作者都放弃对他的维护了吧,不知道喜欢王者荣耀的小伙伴有没有人用过这软件呢?但是这不影响,毕竟是用来练手的东西,我们关注的还是有没有值得爬的东西,直到我看到了这个:
在这里插入图片描述
在这里插入图片描述
不得不说,这才是正经人该干的事情,坏笑😏~
下面进入正文

工具准备
  1. Python3.9.12(其它版本也行,支持requests库就ok)
    官网:https://www.python.org/
  2. 一款自己喜欢的编辑器(我这里用的是pycharm2022.1,无敌~)
    官网:https://www.jetbrains.com/pycharm/download/
  3. 一个软件抓包工具(我用的Fiddler(5.0汉化版)
    官网:https://www.telerik.com/fiddler
    想要汉化版的小伙伴见文末哦~
  4. 王者荣耀盒子
    软件获取:见文末
Fiddler抓包工具的使用

这里我就不赘述了,大家参考一下这篇别人写的博客吧~
链接:
https://www.cnblogs.com/lvjinlin/p/15917531.html
https://blog.csdn.net/qq_42961150/article/details/122545929
当出现下面这个界面也就okl
在这里插入图片描述

网址分析
  1. 配置好Fiddler,手机电脑连接同一个WiFi或者电脑连接手机热点都行,设置好代理及端口
    代理选择手动,win+R 输入ipconfig查看ip地址,端口默认8888
  2. 手机打开 王者荣耀盒子 ->辅助 ->精彩图集
    然后fiddler点击相应网址,注意看下面3个重要的地方
    在这里插入图片描述
代码编辑

首先发送一次请求查看相应内容分析需要提取的地方进行数据清洗
在这里插入图片描述
可以看到’thumb_img’里面的内容就是我们所需要的东西了
多的也不赘述了,直接看下面代码吧,有什么不懂得地方欢迎留言提问

# -*- coding: utf-8 -*-
# @Author : 
# @Date : 2022/4/30 23:06 
# @IDE : PyCharm(2022.1) Python3.9.12
import time
import re
from pprint import pprint
import chardet
import requests

# 王者荣耀盒子请求头
headers = {'Accept-Charset': 'UTF-8',
           'Accept-Encoding': 'gzip,deflate',
           'User-Agent': # TODO 这里自己获取,或者公众号领取源码,
           'X-Requested-With': 'XMLHttpRequest',
           'Content-type': 'application/x-www-form-urlencoded',
           'Connection': 'Keep-Alive',
           'Host': 'gamehelper.gm825.com'}
# 王者荣耀精彩图集url
picture_url = "http://gamehelper.gm825.com/wzry/gallery/list?pn={}" \
              "&channel_id=90014a&app_id=h9044j&game_id=7622&game_name=%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80&vcode=13" \
              ".0.4.0&version_code=13040&cuid=4E907F37FF2DA3495F62741E71FF2DD8&ovr=11&device=vivo_V2024A&net_type=1" \
              "&client_id=&info_ms=&info_ma=dUZkq4DB4wNOx83UjQ4055fOKyJQTqN6cMKZz51pa0c%3D&mno=0&info_la=zRzvFFwXV2O" \
              "%2Bb1xpYuXL1Q%3D%3D&info_ci=zRzvFFwXV2O%2Bb1xpYuXL1Q%3D%3D&mcc=0&clientversion=13.0.4.0&bssid" \
              "=dUZkq4DB4wNOx83UjQ4055fOKyJQTqN6cMKZz51pa0c%3D&os_level=30&os_id=3e95c90cc7ed8a23&resolution" \
              "=1080_2278&dpi=480&client_ip=10.69.138.216&pdunid=unknown"


def wonderful_atlas():
    """
    精彩图集下载
    :return: 每张图片的url地址列表
    """
    url_li = []
    i = 1
    # r = requests.get(url=picture_url.format(i), headers=headers)
    # r.encoding = chardet.detect(r.content)['encoding'] # 自动解码
    # 获取每张图片的url地址并保存到url_all.csv文件当中
    with open('url_all.csv', 'w+', encoding="gbk", errors='ignore') as f:
        while True:
            r = requests.get(url=picture_url.format(i), headers=headers).json()
            i += 1
            if not r['list']:
                print("没有下一页了哦...本次一共爬取到%d页" % i)
                break
            else:
                time.sleep(0.25)
                print("正在爬取第%d页" % i)
                for x in r["list"]:
                    # f.write(x['title'] + "\n")
                    for each_url in x['thumb_img']:
                        url_li.append(each_url)
                        f.write(each_url + "\n")
    print('爬取完毕,文件写入成功!')
    return url_li


def down_pic(li):
    """
    实现图片下载并保存到本地功能
    :param li: 存放每张图片的url地址列表
    :return: 
    """
    print("共有%d张图片需要保存" % len(li))
    header = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
    n = 0
    for i in li[]:
    	# TODO 这里记得新建一个文件夹或者重新设置保存路径
        name = "E:/王者荣耀/cosplay/" + str(i[22:])
        try:
            res = requests.get(url=i, headers=header).content
            with open(name, 'wb') as f:
                f.write(res)
        except:
            print(i)
            if len(i) >= 15:
                with open("err.csv", 'w+') as f:
                    f.write(i)
            continue
        n += 1
        if n % 100 == 0:
            print(n)
    print("保存成功!")


def two_down():
    """
    对第一次下载异常的图片重新进行下载
    :return: 
    """
    header = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/100.0.4896.127 Safari/537.36"}
    with open('err.csv', 'r') as f:
        while f.readline():
            u = f.readline()
            print(u)
            name = "E:/王者荣耀/cosplay/" + str(u[27:]).replace("\n", "")
            res = requests.get(url=u, headers=header).content
            with open(name, 'wb') as f2:
                f2.write(res)

    # x = "http://pictest.wankacn.com/2017-05-11_591416374bd1f.jpeg"
    # y = re.match("[^'http:\/\/pictest\.wankacn\.com\/'](.+)", x)
    # print(y.group())


if __name__ == '__main__':
    # pprint(requests.get(url=picture_url.format(1), headers=headers).json())
    ll = wonderful_atlas()
    down_pic(ll)
    # two_down()

每次只能得到一个网页,formoat(i)配合for循环进行翻页处理,异常处理保证稳定下载5800+张图片,抛出异常的主要原因是地址不匹配,有兴趣的小伙伴可以用正则表达式进行提取,这部分代码也有一点,但不太完美。获取到每张图片的url地址后通过模拟电脑浏览器发送请求要更快。

结果展示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

简直不要太内啥。一个字:
在这里插入图片描述

资源领取方式

微信搜索公众号 “雪南技术栈” 后台回复 [ 王者荣耀cosplay ] 领取
包括:Fiddler5.0汉化版、源码、图片url地址等

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python-AI Xenon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值