此文章借鉴:https://blog.csdn.net/c406495762/article/details/76850843
作者思路很新奇,所以学习测试了一下,可以成功,特意跟大家分享一下。
准备工作
需要用到工具
fiddler抓包工具
APP王者荣耀盒子
下载fiddler之后设置一下参数 Tools>options
勾选这些HTTPS参数
在Connections中设置如下,这里使用默认8888端口,允许远程连接
附上会话含义对照表
设置完成下载证书
安全证书下载
在电脑浏览器中输入地址:http://localhost:8888/
,点击FiddlerRoot certificate
,下载安全证书:
下载完成直接安装到手机上,我测试过也可以直接用的
局域网设置
想要使用Fiddler进行手机抓包,首先要确保手机和电脑的网络在一个内网中,可以使用让电脑和手机都连接同一个路由器。当然,也可以让电脑开放WIFI热点,手机连入。这里,我使用的方法是,让手机和电脑同时连入一个路由器中。最后,让手机使用电脑的代理IP进行上网。
首先,查看电脑的IP地址,在cmd
中使用命令ipconfig
查看电脑IP地址。找到无线局域网WLAN的IPv4地址,记下此地址。
![](https://i-blog.csdnimg.cn/blog_migrate/db366b90f1d6b77c93a288d27a577c13.png)
在手机上,点击连接的WIFI进行网络修改,添加代理。进行手动设置,主机名即为上图中找到的IP地址,端口号即为Fiddler设置中的端口号8888,:
然后开始抓包
实战抓取英雄图片代码如下:
#coding:utf-8
import requests
import json
def get_url(url):
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
response=requests.get(url,headers=headers)
items=json.loads(response.text)
for item in items['list']:
print(item['name'],item['cover'])
download_image(item['name'],item['cover'])
def pare_page(url):
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
response=requests.get(url,headers=headers)
return response.content
def download_image(name,url):
print("正在下载。。",name)
content=pare_page(url)
with open('image/'+name+'.png','wb') as f:
f.write(content)
f.close()
def main():
url='http://gamehelper.gm825.com/wzry/hero/list?channel_id=90001a&app_id=h9044j&game_id=7622&game_name=%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80&vcode=12.0.2&version_code=1202&cuid=CB62F540AA842CC623F5D04B0AF0AA84&ovr=6.0.1&device=vivo_vivo+Y55A&net_type=1&client_id=tdFDX5K%2FHfNPTqTETLeftQ%3D%3D&info_ms=1JBRgiBB5cyziodK0kTHXQ%3D%3D&info_ma=p4qcnKI38TZwm5WlOnLOpM5gBT2glGZwYu%2BJW9qzFXg%3D&mno=0&info_la=OzzjfDkXpV43oHSm5KH7Jg%3D%3D&info_ci=OzzjfDkXpV43oHSm5KH7Jg%3D%3D&mcc=0&clientversion=&bssid=TMz3SkD4%2BwNOWao9UUaO6K7n29wgvfSw10nW9F23FHM%3D&os_level=23&os_id=9519457c70dae0ee&resolution=720_1280&dpi=320&client_ip=192.168.4.182&pdunid=b00c08b'
get_url(url)
if __name__=='__main__':
main()
最后查看一下,所有英雄就都被下载到本地啦。
下面来抓取一下视频的操作:
#coding:utf-8
import json
import requests
def get_url(url):
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}
response=requests.get(url,headers=headers)
items=json.loads(response.text)
items=items.get('list')
for item in items:
print(item.get('title'),item.get('video_url'))
load_media(item.get('title'),item.get('video_url'))
def do_load_media(url, path):
try:
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.3.2.1000 Chrome/30.0.1599.101 Safari/537.36"}
# 正在发起请求
res = requests.get(url, stream=True, headers=headers)
# 写入收到的视频数据
with open('media/'+path+'.mp4', 'ab') as file:
file.write(res.content)
file.flush()
print('下载完成')
except Exception as e:
print(e)
def load_media(path,url):
print('正在下载视频。。。')
do_load_media(url, path)
if __name__=='__main__':
url1='http://gamehelper.gm825.com/wzry/video/rec?pn={0}&channel_id=90001a&app_id=h9044j&game_id=7622&game_name=王者荣耀&vcode=12.0.2&version_code=1202&cuid=CB62F540AA842CC623F5D04B0AF0AA84&ovr=6.0.1&device=vivo_vivo+Y55A&net_type=1&client_id=tdFDX5K%2FHfNPTqTETLeftQ%3D%3D&info_ms=1JBRgiBB5cyziodK0kTHXQ%3D%3D&info_ma=p4qcnKI38TZwm5WlOnLOpM5gBT2glGZwYu%2BJW9qzFXg%3D&mno=0&info_la=OzzjfDkXpV43oHSm5KH7Jg%3D%3D&info_ci=OzzjfDkXpV43oHSm5KH7Jg%3D%3D&mcc=0&clientversion=&bssid=NQCEUuOKrAlze6Mfqc0rgO4%2FtM47uuwrhjHXKRh9U5c%3D&os_level=23&os_id=9519457c70dae0ee&resolution=720_1280&dpi=320&client_ip=172.27.35.2&pdunid=b00c08b'
for i in range(1,3):
url=url1.format(str(i))
print('正在爬取第%s页,请稍等'%i)
get_url(url)
查看下最后结果:
设置一下要爬取页数,视频就会陆陆续续爬取下来。