Python下載手機(jī)小視頻的操作方法
今天為大家介紹使用 mitmproxy 這個(gè)抓包工具如何監(jiān)控手機(jī)上網(wǎng),并且通過抓包,把我們想要的數(shù)據(jù)下載下來。
啟動(dòng) mitmproxy
首先我們通過執(zhí)行命令 mitmweb 啟動(dòng)mitmproxy,讓它處理監(jiān)聽狀態(tài),服務(wù)會(huì)監(jiān)聽本機(jī) 8080 端口,啟動(dòng)后如下:
$ mitmweb Web server listening at http://127.0.0.1:8081/ Proxy server listening at http://*:8080

手機(jī)網(wǎng)絡(luò)配置
1.保證手機(jī)和電腦在同一局域網(wǎng)內(nèi),并查看電腦的局域網(wǎng) IP 地址是多少以備用,查看方式可以用命令查看,如 Windows 系統(tǒng)用
ipconfig 命令,Mac 或 Linux 則用命令 ifconfig,看到如下圖所示,找到本機(jī)在局域網(wǎng)的 IP 地址。

不同操作系統(tǒng),可能展示結(jié)果不同,在這里我們可以看到紅框里我本機(jī)的 IP 地址為 192.168.0.108。
2.配置手機(jī)代理地址,比如以下用 iphone 手機(jī)進(jìn)行配置,打開設(shè)置 -> 無線局域網(wǎng) -> 點(diǎn)現(xiàn)在連接的網(wǎng)絡(luò) -> 點(diǎn)最下面點(diǎn) HTTP 代
理配置,選擇手動(dòng)后,配置代理地址為我們電腦的 IP地址和 mitmproxy 的監(jiān)聽端口,配置如下圖所示:

3.現(xiàn)在我們就可以讓手機(jī)通過電腦上網(wǎng)了,不過目前手機(jī) App 都是通過 HTTPS 加密請求,所以我們需要在手機(jī)上安裝個(gè)
mitmproxy 的 HTTPS 證書。接下來我們打開手機(jī)瀏覽器,輸入網(wǎng)址:mitm.it,打開如下圖所示頁面,選擇對應(yīng)手機(jī)的操作系統(tǒng),
下載證書并安裝。

下載頁
在這里我點(diǎn) Apple 的圖標(biāo)下載證書,下載后等待安裝:


單擊上面的安裝,可能會(huì)出現(xiàn)信任的提示,只要選擇信任證書就可以了,下面是安裝好的界面如下圖:

好了,配置完成下面我們點(diǎn)開個(gè)手機(jī) APP 看到電腦 mitmweb 的頁面上,已經(jīng)出現(xiàn)請求內(nèi)容了。

編寫下載腳本
好了,現(xiàn)在經(jīng)過分析攔截的請求,我們開始用 Python 編寫代碼,通過解析視頻的 url 將視頻下載到本地。在這里我們先來打印下
數(shù)據(jù),新建文件 xiaoshipin.py,然后編寫如下代碼,實(shí)現(xiàn)將已編碼的 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)
編輯完后保存,然后執(zhí)行命令:mitmweb -s xiaoshipin.py,帶上這段腳本來運(yùn)行我們的代理服務(wù),刷新幾個(gè)視頻,會(huì)看到如下圖所示內(nèi)容:

其中就包含了我們需要的下載地址信息,接下來我們只需提取視頻的 url ,并且緩存視頻到本地就 OK 了。

下面我們就來修改上面的 xiaoshipin.py 的代碼,完善下視頻下載的功能。
#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)
#剛分析看到每一個(gè)視頻的所有信息
#都在aweme_list中
video_url=data['aweme_list']
#設(shè)置下載路徑
path='/Users/xx/shipin'
#如果文件夾不存在,則新建
if not os.path.exists(path):
os.mkdir(path)
# 循環(huán)所有視頻 url
for each in video_url:
#視頻描述
desc=each['desc']
url=each['video']['play_addr']['url_list'][0]
# 設(shè)置視頻名稱
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,'下載完畢')上面我已經(jīng)把相關(guān)代碼注釋好了,現(xiàn)在我們保存編輯好的代碼,然后再次執(zhí)行命令:mitmweb -s xiaoshipin.py,啟動(dòng)監(jiān)聽服務(wù)。
然后打開手機(jī)再次下視頻,就會(huì)看到視頻是不是已經(jīng)都存到本地了。
到此這篇關(guān)于Python 下載手機(jī)小視頻的文章就介紹到這了,更多相關(guān)Python 下載手機(jī)小視頻內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Python 2.7即將停止支持時(shí),我們?yōu)槟銕砹艘环輕ython 3.x遷移指南
這篇文章主要介紹了在Python 2.7即將停止支持時(shí)我們?yōu)槟銣?zhǔn)備了一份python 3.x遷移指南的相關(guān)資料,需要的朋友可以參考下2018-01-01
OpenCV計(jì)算平均值cv::mean實(shí)例代碼
函數(shù)cv::mean計(jì)算數(shù)組元素的平均值M,每個(gè)通道都是獨(dú)立的,并返回這個(gè)平均值,這篇文章主要給大家介紹了關(guān)于OpenCV計(jì)算平均值cv::mean的相關(guān)資料,需要的朋友可以參考下2021-08-08
深入了解python的tkinter實(shí)現(xiàn)簡單登錄
這篇文章主要為大家介紹了python的tkinter實(shí)現(xiàn)簡單登錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12
tensor.squeeze函數(shù)和tensor.unsqueeze函數(shù)的使用詳解
本文主要介紹了tensor.squeeze函數(shù)和tensor.unsqueeze函數(shù)的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
基于Python實(shí)現(xiàn)音樂播放器的實(shí)現(xiàn)示例代碼
這篇文章主要介紹了如何利用Python編寫簡易的音樂播放器,文中的示例代碼講解詳細(xì),具有一的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04
Django框架文件上傳與自定義圖片上傳路徑、上傳文件名操作分析
這篇文章主要介紹了Django框架文件上傳與自定義圖片上傳路徑、上傳文件名操作,結(jié)合實(shí)例形式分析了Django框架文件上傳的原理、步驟、實(shí)現(xiàn)方法以及圖片上傳時(shí)自定義上傳路徑、上傳文件名的相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
Python讀取excel文件中的數(shù)據(jù),繪制折線圖及散點(diǎn)圖
這篇文章主要介紹了Python讀取excel文件中的數(shù)據(jù),繪制折線圖及散點(diǎn)圖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09

