爬取抖音短視頻改良版(無水印版)


使用更簡單的方法

在我之前的一篇博客中,我用了構造網址的方法來獲取抖音短視頻,但是在今天我又一次的研究抖音短視頻的時候發現了一個更加簡單的方法,發現我之前的分析實在是太過繁瑣了,所以有寫了一篇博客來記錄下這個方法。(上一篇博客就當做是就記錄下分析網頁的思路吧,就不作更改了)

與上一篇博客不同的是,這個方法可以省略掉大量的分析步驟

隨便打開一個抖音個人主頁,我選擇的是愛奇藝體育,接着右鍵檢查網頁元素,點擊network選項卡下的xhr選項,分析抓到的包

點到preview選項卡,點擊video->download_addr->url_list

發現這下面跟着的兩個網址正好是視頻的網址(根本不需要構造,只是這個網址藏的有點深,需要非常耐心的尋找),打開網址查看:

提取到這個網址的時候我以為已經結束了,但是一個大佬@金亭玉立給我發來了一篇文章最新版抖音(20200428)去水印原理及源碼,簡單的原理與面臨的挑戰提醒了我一些沒有想到的東西,在此表示感謝!

我們接着往下看,在下面的play_addr下面也有一個鏈接,這個鏈接下面的視頻就是無水印版本的視頻

ok,現在我們只要想辦法提取到它就大功告成了

我這次使用的方法中用到了jsonpath模塊,直接pip下載就可以了:

pip install jsonpath

代碼

import requests
import json
import jsonpath

class Douyin:
    def page_num(self,max_cursor):
        #隨機碼
        random_field = '00nvcRAUjgJQBMjqpgesfdNJ72&dytk=4a01c95562f1f10264fb14086512f919'
        #網址的主體
        url = 'https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAAU7Bwg8WznVaafqWLyLUwcVUf9LgrKGYmctJ3n5SwlOA&count=21&max_cursor=' + str(max_cursor) + '&aid=1128&_signature=' + random_field
        #請求頭
        headers = {
            'user-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36',
        }
        response = requests.get(url,headers=headers).text
        #轉換成json數據
        resp = json.loads(response)
        #提取到max_cursor
        max_cursor = resp['max_cursor']
        #遍歷
        for data in resp['aweme_list']:
            # 視頻簡介
            video_title = data['desc']
            #使用jsonpath語法提取paly_addr
            video_url = jsonpath.jsonpath(data,'$..paly_addr')
            for a in video_url:
                #提取出來第一個鏈接地址
                video_realurl = a['url_list'][1]
            # 請求視頻
            video = requests.get(video_realurl, headers=headers).content
            with open('t/' + video_title, 'wb') as f:
                print('正在下載:', video_title)
                f.write(video)

        #判斷停止構造網址的條件
        if max_cursor==0:
            return 1
        else:
            douyin.page_num(max_cursor)

if __name__ == '__main__':
     douyin = Douyin()
     douyin.page_num(max_cursor=0)

優點

這個方法的優點是可以省去很大一部分的分析網址的步驟,而且沒有調用到webdriver(可以不限制瀏覽器),速度也會有顯著提升,得到的視頻也是無水印的

不足

還是沒有解決隨機生成字符串的問題,操作比較麻煩

使用方法

https://github.com/jjjjmhao/Sprider/blob/master/simplescreenrecorder-2020-05-04_23.54.22.mkv


免責聲明!

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



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