python+fiddler 抓取抖音數據包並下載抖音視頻


這個我們要下載視頻,那么肯定首先去找抖音視頻的url地址,那么這個地址肯定在json格式的數據包中,所以我們就去專門查看json格式數據包

這個怎么找我就不用了,直接看結果吧

你找json包,可以選大的去看,畢竟包含視頻地址這些json包肯定不會小

 

 

 

 視頻播放地址可能有好多鏈接,這里我只是拿我的做一個例子。我原本用的是下面視頻下載那個地址,但是會匹配到好多沒用的地址

 

 

 

 

 視頻下載url和視頻播放url,我們選擇視頻播放url,畢竟在抖音上有些視頻不允許下載,但是可以播放(^_^)

你發現視頻播放url里面包含0,1兩個可以播放地址,2,3那兩個地址我打開試了試沒用。

0,1兩個播放地址,隨便選一個就行(這里我選的0號),數據包給出兩個地址,應該是防止萬一一個地址不能用(管它呢,隨便用一個就行)

 

然后就需要把這個json數據弄到本地,不能通過python的request庫訪問來獲取,因為我試了試,弄不到。。。

那這里有兩種方法,一種是復制后,粘貼到txt文件中。第二種就是在fiddler中增添規則,讓fiddler一遇見json數據包就保存到本地

 

抓取規則如下:

 if (oSession.uriContains("https://api-eagle.amemv.com/aweme/v1/feed/")){
            var strBody=oSession.GetResponseBodyAsString();
            var sps = oSession.PathAndQuery.slice(-58,);
            //FiddlerObject.alert(sps)
            var filename = "C:/Users/HEXU/Desktop/抖音數據爬取/抖音爬取資料/raw_data" + "/" + sps + ".json";  
            var curDate = new Date();   
            var sw : System.IO.StreamWriter;  
            if (System.IO.File.Exists(filename)){  
                sw = System.IO.File.AppendText(filename);  
                sw.Write(strBody);  
            }  
            else{  
                sw = System.IO.File.CreateText(filename);  
                sw.Write(strBody);  
            }  
            
            sw.Close();  
            sw.Dispose();  
        }

放到下圖所示位置

 

 

這個腳本有兩點需要修改的:

(1)第一行的網址:

這個是從視頻包的url中摘出來的,抖音會時不時更新這個url,所以不能用了也要去更新:

 

 2)路徑,那個是我設置json包保存的地址,自己一定要去修改,並創建文件夾,修改完記着點保存。

 

 

我這里用的是最lou的方法(也就是粘貼復制),這種方法我沒弄好,具體請見:https://blog.csdn.net/weixin_43582101/article/details/89600007

之后我就是把json數據放到文本里面,在python中讀入,然后用re模塊的findall方法獲取其中鏈接

 

代碼:

import requests
import re
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
def down_video(url,num):
    con = requests.get(url,headers=headers).content
    with open(str(num)+'.mp4','wb') as f:
        f.write(con)

file =open('E:/pycharm/xiang1/python-json/2.json','r',encoding='utf-8',errors='ignore')
context = file.read()
pattern = 'play_addr_lowbr:.*?list:.*?"(.*?)"'
result = re.findall(pattern,context,re.S)
ans = 1
for i in result:
    print(i)
    down_video(i,ans)
    ans+=1

 

同時pycharm控制台也會輸出鏈接:

 

 

但是要注意,這些鏈接都有時效,過一段時間就不能用了

 運行后結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM