手把手教你用 Python 下载手机小视频
今天为大家介绍使用 mitmproxy 这个抓包工具如何监控手机上网,并且通过抓包,把我们想要的数据下载下来。
启动 mitmproxy
首先我们通过执行命令 mitmweb 启动mitmproxy,让它处理监听状态,服务会监听本机 8080 端口,启动后如下:
Python学习交流Q群:660193417###
$ mitmweb
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:8080

手机网络配置
1.保证手机和电脑在同一局域网内,并查看电脑的局域网 IP 地址是多少以备用,查看方式可以用命令查看,如 Windows 系统用ipconfig 命令,Mac 或 Linux 则用命令 ifconfig,看到如下图所示,找到本机在局域网的 IP 地址。
不同操作系统,可能展示结果不同,在这里我们可以看到红框里我本机的 IP 地址为 192.168.0.108。
2.配置手机代理地址,比如以下用 iphone 手机进行配置,打开设置 -> 无线局域网 -> 点现在连接的网络 -> 点最下面点 HTTP 代理配置,选择手动后,配置代理地址为我们电脑的 IP地址和 mitmproxy 的监听端口,配置如下图所示:
3.现在我们就可以让手机通过电脑上网了,不过目前手机 App 都是通过 HTTPS 加密请求,所以我们需要在手机上安装个
mitmproxy 的 HTTPS 证书。接下来我们打开手机浏览器,输入网址:mitm.it,打开如下图所示页面,选择对应手机的操作系统,下载证书并安装。
下载页
在这里我点 Apple 的图标下载证书,下载后等待安装:

单击上面的安装,可能会出现信任的提示,只要选择信任证书就可以了,下面是安装好的界面如下图:
好了,配置完成下面我们点开个手机 APP 看到电脑 mitmweb 的页面上,已经出现请求内容了。
编写下载脚本
好了,现在经过分析拦截的请求,我们开始用 Python 编写代码,通过解析视频的 url 将视频下载到本地。在这里我们先来打印下数据,新建文件 xiaoshipin.py,然后编写如下代码,实现将已编码的 json 字符串解码为 python 对象:
#xiaoshipin.py
import json
def response(flow):
url='https://api.amemv.com/aweme/v1/aweme/post/'
#筛选出以上面url为开头的url
if flow.request.url.startswith(url):
text=flow.response.text
#将已编码的json字符串解码为python对象
data=json.loads(text)
print(data)
编辑完后保存,然后执行命令:mitmweb -s xiaoshipin.py,带上这段脚本来运行我们的代理服务,刷新几个视频,会看到如下图所示内容:
其中就包含了我们需要的下载地址信息,接下来我们只需提取视频的 url ,并且缓存视频到本地就 OK 了。

下面我们就来修改上面的 xiaoshipin.py 的代码,完善下视频下载的功能。
Python学习交流Q群:660193417###
#xiaoshipin.py
#引入包
import json,os
import requests
#只拦截并处理返回请求
def response(flow):
#请求的 url
url='https://api.amemv.com/aweme/v1/aweme/post/'
#筛选出以上面url为开头的url
if flow.request.url.startswith(url):
text=flow.response.text
#将已编码的json字符串解码为python对象
data=json.loads(text)
#刚分析看到每一个视频的所有信息
#都在aweme_list中
video_url=data['aweme_list']
#设置下载路径
path='/Users/xx/shipin'
#如果文件夹不存在,则新建
if not os.path.exists(path):
os.mkdir(path)
# 循环所有视频 url
for each in video_url:
#视频描述
desc=each['desc']
url=each['video']['play_addr']['url_list'][0]
# 设置视频名称
filename=path+'/'+desc+'.mp4'
# 用 request 请求视频流
req=requests.get(url=url,verify=False)
# 保存视频文件
with open(filename,'ab') as f:
f.write(req.content)
f.flush()
print(filename,'下载完毕')
上面我已经把相关代码注释好了,现在我们保存编辑好的代码,然后再次执行命令:mitmweb -s xiaoshipin.py,启动监听服务。
然后打开手机再次下视频,就会看到视频是不是已经都存到本地了。
手把手教你用 Python 下载手机小视频的更多相关文章
- 手把手教你吧Python应用到实际开发 不再空谈悟法☝☝☝
手把手教你吧Python应用到实际开发 不再空谈悟法☝☝☝ 想用python做机器学习吗,是不是在为从哪开始挠头?这里我假定你是新手,这篇文章里咱们一起用Python完成第一个机器学习项目.我会手把手 ...
- 手把手教你使用ADB卸载手机内置App软件
[一.前言] 不知道你们有没有那么一段黑暗时期,刚买个手机,手机上内置一堆app,还卸载不掉,然后每天各种广告,手机一共1G的运行内存,那些流氓app还要再占走一些内存,真是让人欲哭无泪啊,后来我就学 ...
- 手把手教你用Python搭建自己的量化回测框架【均值回归策略】
手把手教你用Python搭建自己的量化回测框架[均值回归策略] 引言 大部分量化策略都可以归类为均值回归与动量策略.事实上,只有当股票价格是均值回归或趋势的,交易策略才能盈利.否则,价格是随机游走的, ...
- 手把手教你使用Python爬取西刺代理数据(下篇)
/1 前言/ 前几天小编发布了手把手教你使用Python爬取西次代理数据(上篇),木有赶上车的小伙伴,可以戳进去看看.今天小编带大家进行网页结构的分析以及网页数据的提取,具体步骤如下. /2 首页分析 ...
- 手把手教你吧Python应用到实际开发 不再空谈悟法✍✍✍
手把手教你吧Python应用到实际开发 不再空谈悟法 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问 ...
- 手把手教你把Python应用到实际开发 不再空谈语法
手把手教你把Python应用到实际开发 不再空谈语法 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问 ...
- 【python】10分钟教你用python下载和拼接微信好友头像图片
前言 相信微信大家是用得再多也不过了.那么,对于python+微信,又能玩出什么新的花样呢?下面小编就给大家带来一个好玩的东西.用python下载所有的微信好友的头像,然后拼接成一张大图.这样,大家就 ...
- 手把手教你用Python抓取AWS的日志(CloudTrail)数据
数据时代,利用数据做决策是大数据的核心价值. 本文手把手,教你使用python进行AWS的CloudTrail配置,进行日志抓取.进行数据分析,发现数据价值! 如今是云的时代,许多公司都把自己的IT架 ...
- 【震惊】手把手教你用python做绘图工具(一)
在这篇博客里将为你介绍如何通过numpy和cv2进行结和去创建画布,包括空白画布.白色画布和彩色画布.创建画布是制作绘图工具的前提,有了画布我们就可以在画布上尽情的挥洒自己的艺术细胞. 还在为如何去绘 ...
随机推荐
- React + TypeScript + Taro前端开发小结
前言 项目到一段落,先来记录一下,本文以前端新手的角度记录React.TypeScript.Taro相关技术的开发体验以及遇到的问题和解决方法. 之前总说要学React(这篇博客:代码使我头疼之Rea ...
- Jenkins+Allure测试报告+飞书机器人发送通知
一.前言 之前讲了jenkins如何设置定时任务执行脚本,结合实际情况,本篇讲述在jenkins构建成功后,如何生成测试报告,以及推送飞书(因为我公司用的是飞书,所以是发送到飞书机器人). 本次实践搞 ...
- Confluent之Kafka Connector初体验
概述 背景 Apache Kafka 是最大.最成功的开源项目之一,可以说是无人不知无人不晓,在前面的文章<Apache Kafka分布式流处理平台及大厂面试宝典>我们也充分认识了Kafk ...
- 广度优先搜索 BFS 学习笔记
广度优先搜索 BFS 学习笔记 引入 广搜是图论中的基础算法之一,属于一种盲目搜寻方法. 广搜需要使用队列来实现,分以下几步: 将起点插入队尾: 取队首 \(u\),如果 $u\to v $ 有一条路 ...
- Python 迭代器、生成器、可迭代对象
迭代器 1 #迭代器定义: 2 #类中得有__iter__和__next__两个方法 3 #__iter__方法放回对象本身,即:self(是迭代器对象) 4 #__next__方法,返回下一个数据, ...
- 数据结构_C语言_二叉树先序、中序、后序遍历
# include <stdio.h> # include <stdlib.h> typedef struct BiTreeNode { char data; struct B ...
- EF Core 配置模型
0 前言 本文的第一节,会概述配置模型的作用(对数据模型的补充描述). 第二节描述两种配置方式,即:数据注释(data annotations)和 Fluent API 方式. 第三节开始,主要是将常 ...
- PowerShell 笔记 - 基础篇
Powershell 笔记 基础 查看powershell版本 PS C:\Users\chino> $PSVersionTable Name Value ---- ----- PSVersio ...
- Spring-Batch处理MySQL数据后存到CSV文件
1 介绍 用Spring Batch实现了个简单的需求,从MySQL中读取用户表数据,根据生日计算年龄,将结果输出到csv文件. 1.1 准备表及数据 user test; DROP TABLE IF ...
- k8s client-go源码分析 informer源码分析(4)-DeltaFIFO源码分析
client-go之DeltaFIFO源码分析 1.DeltaFIFO概述 先从名字上来看,DeltaFIFO,首先它是一个FIFO,也就是一个先进先出的队列,而Delta代表变化的资源对象,其包含资 ...