手机网页视频抓取工具(mitmdump可以对接Python脚本,在Python中可以修改请求报文和响应报文)
优采云 发布时间: 2021-11-24 00:12手机网页视频抓取工具(mitmdump可以对接Python脚本,在Python中可以修改请求报文和响应报文)
mitmdump 可以与 Python 脚本接口,在其中可以修改请求消息和响应消息。
安装 mitmdump
在命令行模式下 pip install mitmproxy 就可以了
连接到手机
只需用手机连接电脑的WiFi
第 1 步:将手机连接到 WiFi
第二步:点击手机WiFi中的代理设置,选择手动设置代理
第三步:服务器的ip填写电脑的ip(不知道的可以在命令行方式输入ipconfig查看),端口填写8080(默认端口)
##经过以上三步,你手机的所有网络请求和响应都会经过mitmproxy。现在我们还没有开启mitmproxy服务,所有手机暂时无法上网。
捕获
在命令行模式下输入mitmdump启动mitmproxy服务。现在手机上的所有网络请求和响应都将被捕获。
##现在手机可以上网了,只要有网络请求和响应,就会在命令行界面显示出来。
使用 Python 脚本修改网络请求
脚本文件保存为script.py(任何文件名都可以,只要有py后缀即可)
接下来写script.py
# 修改请求的话,函数名必须为request,参数必须为flow,不然执行不了。
# flow就是我们利用mitmproxy抓包抓取下来的请求报文。
def request(flow):
flow.request.url = 'http://httpbin.org/get'
现在启动mitmproxy服务和Python脚本,在命令行界面输入mitmdump -s script.py
虽然脚本中的函数只有一行代码,但现在所有的网络请求URL都被修改为/get。您可以尝试使用手机浏览器输入任意网站。(同样如果你打开app,请求被发送到/get,所以你手机上需要上线的app现在不可用。)
如果只修改url,部分网站会拒绝响应。您可以使用请求函数来修改更多的请求消息信息。
def request(flow):
flow.request.headers['user-agent'] = 'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.108 Safari/537.36 MZBrowser/7.9.6'
flow.request.headers['accept'] = '*/*'
flow.request.headers['referer'] = 'https://www.qq.com/'
flow.request.headers['accept-encoding'] = 'gzip, deflate, br'
flow.request.headers['accept-language'] = 'zh-CN,en-US;q=0.8'
flow.request.url = 'https://www.qq.com'
如何使用抓包工具取决于个人需求。如果是用来实现爬虫的话,mitmproxy和浏览器的开发者工具是一样的。
最基本的代码是:
import requests
def request(flow):
## 获取请求的url
url = flow.request.url
## 获取请求的headers(伪装成由手机发起请求)
headers = flow.request.headers
data = requests.get(url=url, headers=headers)
至于后续数据如何处理,就看个人需求了。
示例:截取抖音小视频
第一步:连接手机
第 2 步:编写代码
第三步:mitmdump -s file.py
import requests
## num变量用来设置文件名
num = 1
def request(flow):
## 获取请求url和headers
url = flow.request.url
headers = flow.request.headers
global num
## 抓包之后自行观察,得出小视频的抓取逻辑
if 'ixigua' in url:
filename = str(num) + '.mp4'
resp = requests.get(url=url, headers=headers, stream=True)
with open(filename, 'wb') as f:
f.write(resp.content)
num += 1
或者您可以使用响应方法。效果和使用request方法一样。
不同的是,如果写了请求方法,手机app还没有将请求发送到“抖音服务器”(被mitmproxy拦截);
如果是响应方式,此时“抖音server”已经发回了响应,我们的mitmproxy拦截了它的响应消息,这样我们的PC端就不需要再发送请求了。直接使用响应消息的正文。
## num变量用来设置文件名
num = 10000
def response(flow):
## 获取请求url
url = flow.request.url
global num
## 抓包之后自行观察,得出小视频的抓取逻辑
if 'ixigua' in url:
filename = str(num) + '.mp4'
resp = flow.response
with open(filename, 'wb') as f:
f.write(resp.content)
num += 1
一定要注意def request(flow)和def response(flow)的区别
如果在请求方法中,flow.response 没有返回任何内容,因为请求还没有被转发。
保存的只是一个空文件。
这样就可以用手指将抖音的小视频下载到电脑上。(这不是爬虫,因为不涉及自动操作,需要用手指手动操作手机屏幕,如果需要自动操作,可以使用Appium)
如果你想下载音乐什么的,同样的原则也适用。音乐代码不会公开,因为它涉及版权问题。
由于mitmproxy在windows下不能用,所以只能用mitmdump(虽然抓包功能是一样的,但是命令行界面的mitmdump真的很晕)可以用Charles抓包分析,Charles配置连接到电话。方法是一样的。
(Android系统和IOS系统是一样的)
1.下载查尔斯
2.PC下载Charles证书(然后设置为“受信根证书”)
3.在移动端(手机)下载Charles证书
4.在移动端连接局域网(然后手动设置IP和端口)
在Charles中,当有流量通过时,Host会高亮显示,如*敏*感*词*所示,更便于分析。
经过分析,使用mitmdump对接python脚本,最后就可以手动抓取手机端的数据到PC端了。