Python實現超簡單【抖音】無水印視頻批量下載

前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

作者:python亂燉

PS:如有需要Python學習資料的小夥伴可以加點擊下方鏈接自行獲取http://t.cn/A6Zvjdun

01 獲取你喜歡的拍客的視頻url

即抖音用戶主頁的url,我將以羅永浩的主頁連接爲例(本人第一次下載抖音就是衝着羅永浩去的,所以也只關注了他一個人)

1. 獲取主頁鏈接

打開抖音,點進用戶的主頁面,點擊右上角的三個點:
在這裏插入圖片描述
選擇分享:
在這裏插入圖片描述
再點擊複製鏈接即可,我們可以獲取如下url:https://v.douyin.com/JJ8b6Hq/

2. 獲取重定向鏈接

我們只需要將上面這個鏈接粘貼到chrome瀏覽器,就可以獲取到重定向鏈接
在這裏插入圖片描述
重定向後的鏈接:

https://www.iesdouyin.com/share/user/4195355415549012?u_code=c23d6456gli&sec_uid=MS4wLjABAAAAlwXCzzm7SmBfdZAsqQ_wVVUbpTvUSX1WC_x8HAjMa3gLb88-MwKL7s4OqlYntX4r&timestamp=1590603009&utm_source=copy&utm_campaign=client_share&utm_medium=android&share_app_name=douyin

現在我們需要記住url中/user後面的一串數字,也就是4195355415549012,這是我們的用戶id。以後只要有了這樣的用戶ID,直接替換進url即可(時間戳也需要修改一下)

02 獲取用戶下面的所有的視頻id

我們剛剛獲取了視頻主頁的鏈接,現在我們要通過主頁鏈接來獲取當前頁面下的所有視頻。爲了方便我們觀看和調試,我們將Chrome開成iPhone模式。
在這裏插入圖片描述
1. 獲取請求鏈接

將Network設置成XHR,重新刷新一下頁面,獲取請求內容:
在這裏插入圖片描述
我們可以看到上面選中的那個請求,返回的是一串json,我們將內容複製下來看看,搜索返回的json中有關video的字段,通過下圖我們就可以看到video裏面有個url_list,裏面有兩個不同的url,這兩個url其實就是視頻相關的地址了,但是還有點問題,這兩個url點進去並不能直接看到視頻。
在這裏插入圖片描述
2. 獲取視頻鏈接

這裏我們需要將url做一點點修改。我們將/play修改成/playmw就可以了,這個時候我們發現,這兩個視頻地址被重定向成正常的視頻地址了。(下面來說爲什麼要加mw,這個代表什麼)
在這裏插入圖片描述
這樣我們就相當於順利拿到視頻的地址了,我們可以去json中獲取所有的視頻url鏈接:

pattern = re.compile('"(https://aweme.snssdk.com/aweme/v1/play/.*?)"')
result = pattern.findall(data)
result = [i.replace("/play/", "/playwm/") for i in result]
for i in result:
    print(i)

在這裏插入圖片描述
3. 水印問題

關於水印問題,看了簡書上有篇文章有介紹,水印與無水印之間的區別,這邊我就不作詳細介紹了。其實我們一開始拿到的url就是無水印的,但是鏈接本身並沒重定向到無水印的視頻,加上wm之後,url會重定向到有水印的視頻。
在這裏插入圖片描述

完整代碼

import re
import requests
import os
header = {
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "accept-encoding": "gzip, deflate, sdch, br",
    "accept-language": "en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4",
    "cache-control": "no-cache",
    "x-tt-logid": "202005280227480100140460221A4FD1CF",
    "x-tt-trace-host": "01ec7cfa064a667fc06b9359628310d7439e62ebd3f237434a2ab55522586ad295c69c0af06484df374b32e14ddb3f000f9912025769ad3b7c6273355e56a9332d1901cddf01df6db00b0b6f4b3f159082",
    'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
    'cookie': 'tt_webid=6831576518742705677; _ba=BA0.2-20200528-5199e-qC83gMfiQQZIHGPAbWkc; _ga=GA1.2.1655972543.1590600365; _gid=GA1.2.843249182.1590600365'
}
data = {
    "sec_uid": "MS4wLjABAAAAlwXCzzm7SmBfdZAsqQ_wVVUbpTvUSX1WC_x8HAjMa3gLb88-MwKL7s4OqlYntX4r",
    "count": "21",
    "max_cursor": "0",
    "aid": "1128",
    "_signature": "1rexVRAciIE-bZMoZ46qv9a3sU",
    "dytk": "96ad80961288263ad9d1cff2895d0636"
}
url = "https://www.iesdouyin.com/web/api/v2/aweme/post"
url = "https://www.iesdouyin.com/share/user/4195355415549012?u_code=c23d6456gli&sec_uid=MS4wLjABAAAAlwXCzzm7SmBfdZAsqQ_wVVUbpTvUSX1WC_x8HAjMa3gLb88-MwKL7s4OqlYntX4r&timestamp=1590603009&utm_source=copy&utm_campaign=client_share&utm_medium=android&share_app_name=douyin"

response = requests.get(url, headers=header)


data = response.text
pattern = re.compile('"(https://aweme.snssdk.com/aweme/v1/play/.*?)"')
result = pattern.findall(data)
result = [i.split("&ratio")[0] for i in result]
result2 = [i.replace("/play/", "/playwm/") for i in result]

for i in result:
    print(i)
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36',
}
if not os.path.exists("無水印"):
    os.mkdir("無水印")
if not os.path.exists("水印"):
    os.mkdir("水印")

count = 0
for res1 in result:
    count += 1
    videoBin = requests.get(res1, timeout=5, headers=headers)
    with open(f'無水印/{count}.mp4', 'wb') as fb:
        fb.write(videoBin.content)
count = 0
for res2 in result2:
    count += 1
    videoBin = requests.get(res2, timeout=5, headers=headers)
    with open(f'水印/{count}.mp4', 'wb') as fb:
        fb.write(videoBin.content)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章