Python抖音無(wú)水印視頻下載方法

分享學(xué)習(xí)Python爬蟲、數(shù)據(jù)分析、數(shù)據(jù)挖掘的點(diǎn)滴。
最近發(fā)現(xiàn)了抖音無(wú)水印視頻的下載方法。
# 抖音接口
「url」參數(shù)值就是從抖音上復(fù)制的鏈接。
Python下載
首先來(lái)看一下,直接訪問(wèn)抖音鏈接得到的結(jié)果。

妥妥的水印...
接下來(lái)打開(kāi)瀏覽器的開(kāi)發(fā)者工具,看看視頻的地址。

可以發(fā)現(xiàn)「playAddr」就是視頻的地址,復(fù)制然后訪問(wèn)。

鏈接會(huì)重定向到以「v9」開(kāi)頭的鏈接,然而還是有水印。
接下來(lái)就是重點(diǎn)了,首先你需要讓你的瀏覽器能夠修改UA,即爬蟲經(jīng)常用到的「User-Agent」。
我用的是Mac+谷歌瀏覽器,就說(shuō)說(shuō)我自己怎么修改的。
Windows的請(qǐng)自行百度~
首先在電腦的文稿中創(chuàng)建一個(gè)文件夾。

這個(gè)文件夾的路徑如下。
/Users/star-river/Documents/MyChrome
并且在根目錄的終端運(yùn)行下面這段代碼。
open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=/Users/star-river/Documents/MyChrome
如此我的谷歌瀏覽器就能成功更換UA啦!

還是直接訪問(wèn)抖音的鏈接,可以看到結(jié)果和最初的不一樣。
就在這個(gè)模式下查找接口。

發(fā)現(xiàn)「?item_ids」開(kāi)頭的這個(gè)接口就包含了我們想要的無(wú)水印抖音視頻。
就是「play_addr」下的列表中的那兩個(gè)鏈接。
其中「?item_ids」開(kāi)頭的這個(gè)接口有兩個(gè)參數(shù)需要我們?cè)诹硪粋€(gè)接口中獲取。


這樣「item_ids」和「dytk」參數(shù)值我們也知道了。
不過(guò)我們直接用瀏覽器訪問(wèn)獲取到的那兩個(gè)鏈接是不會(huì)直接出現(xiàn)視頻的,需要和上面的一樣。
也改變一下UA,這里的鏈接如果還用「iPhone X」這個(gè)UA訪問(wèn),會(huì)失敗。
什么原因,小F就不得而知了...
把瀏覽器UA改為「Responsive」即可訪問(wèn),鏈接會(huì)重定向。

這樣無(wú)水印的抖音視頻就搞定了。
不過(guò)要是每個(gè)視頻都需要這么下載,就太麻煩了。
所以寫了用Python就可以下載視頻的代碼。
import requests
import json
import re
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/ajpg,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'cache-control': 'max-age=0',
# 這個(gè)貌似很重要
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36',
}
def download(url):
"""
下載抖音無(wú)水印視頻
"""
# 獲取接口參數(shù)
html = requests.get(url=url, headers=headers)
title = re.findall('itemId: "(.*?)",', html.text)[0]
dytk = re.findall('dytk: "(.*?)" }', html.text)[0]
# 拼接接口
url_item = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=' + title + '&dytk=' + dytk
# 獲取抖音無(wú)水印視頻鏈接
html_item = requests.get(url=url_item, headers=headers)
# 字符串轉(zhuǎn)字典
content = json.loads(html_item.text)
# 視頻接口
url_video = content['item_list'][0]['video']['play_addr']['url_list'][1]
response = requests.get(url_video, headers=headers, allow_redirects=True)
# 獲取重定向后的鏈接,這個(gè)也是無(wú)水印視頻的下載鏈接,不過(guò)本次沒(méi)用
redirect = response.url
print(redirect)
# 視頻是二進(jìn)制,需要這種下載辦法
video = requests.get(url_video, headers=headers).content
video_name = "douyin.mp4"
with open(video_name, 'wb') as f:
f.write(video)
f.flush()
print("下載完成")
if __name__ == '__main__':
# 抖音鏈接
url = 'https://v.douyin.com/XJj85H/'
download(url)
無(wú)水印視頻完美下載。
接口下載
既然知道了如何用Python下載視頻。
那么小F想讓大家下載的更方便一點(diǎn),所以將程序部署到了服務(wù)器上。
你只需要通過(guò)小F的接口即可下載視頻,代碼如下。
from flask import Flask, request, send_file
import requests
import json
import re
app = Flask(__name__)
# 只接受get方法訪問(wèn)
@app.route("/douyin/", methods=["GET"])
def check():
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/ajpg,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'cache-control': 'max-age=0',
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36',
}
# 默認(rèn)返回內(nèi)容
return_dict = {'code': 1, 'result': False, 'msg': '請(qǐng)求成功'}
# 判斷入?yún)⑹欠駷榭?
if request.args is None:
return_dict['return_code'] = '504'
return_dict['return_info'] = '請(qǐng)求參數(shù)為空'
return json.dumps(return_dict, ensure_ascii=False)
# 獲取傳入的參數(shù)
get_data = request.args.to_dict()
url = get_data.get('url')
# 獲取接口參數(shù)
html = requests.get(url=url, headers=headers)
title = re.findall('itemId: "(.*?)",', html.text)[0]
dytk = re.findall('dytk: "(.*?)" }', html.text)[0]
# 拼接接口
url_item = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=' + title + '&dytk=' + dytk
# 獲取抖音無(wú)水印視頻鏈接
html_item = requests.get(url=url_item, headers=headers)
# 字符串轉(zhuǎn)字典
content = json.loads(html_item.text)
# 獲取視頻相關(guān)的信息
# data = {}
# 視頻的描述
# data['videoDesc'] = content['item_list'][0]['desc']
# 視頻的封面圖,小圖
# data['dynamiCoverUrl'] = content['item_list'][0]['video']['dynamic_cover']['url_list'][0]
# 視頻的封面圖,大圖
# data['staticCoverUrl'] = content['item_list'][0]['video']['origin_cover']['url_list'][0]
# 視頻的評(píng)論數(shù)
# data['comments'] = content['item_list'][0]['statistics']['comment_count']
# 視頻的點(diǎn)贊數(shù)
# data['prise'] = content['item_list'][0]['statistics']['digg_count']
# 視頻接口
url_video = content['item_list'][0]['video']['play_addr']['url_list'][1]
response = requests.get(url_video, headers=headers, allow_redirects=True)
# 獲取重定向后的鏈接,這個(gè)也是無(wú)水印視頻的下載鏈接,不過(guò)本次沒(méi)用
redirect = response.url
# print(redirect)
# 視頻的下載鏈接
# data['videoPlayAddr'] = redirect
# 返回視頻的信息
# return_dict['result'] = data
# 返回結(jié)果
# return json.dumps(return_dict, ensure_ascii=False)
video = requests.get(url=redirect, headers=headers).content
video_name = "douyin.mp4"
with open(video_name, 'wb') as f:
f.write(video)
f.flush()
return send_file('douyin.mp4')
if __name__ == "__main__":
# 本地調(diào)試
app.run(debug=True)
# 部署上線
# app.run(host='127.0.0.1', port=443)
如果本地安裝了Flask以及Requests庫(kù),這個(gè)程序是可以直接運(yùn)行。
并且能夠下載到你所想要的無(wú)水印抖音視頻。
# 本地接口
http://127.0.0.1:500/douyin/?url=https://v.douyin.com/CoQBx1/
部署到服務(wù)器上的話,則需要使用443端口。

到此這篇關(guān)于用Python下載抖音無(wú)水印視頻的文章就介紹到這了,更多相關(guān)Python下載抖音無(wú)水印視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)aes加密及pycryptodome庫(kù)使用
AES算法是高級(jí)加密標(biāo)準(zhǔn),它是一種對(duì)稱加密算法,AES只有一個(gè)密鑰,這個(gè)密鑰既用來(lái)加密,也用于解密,這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)aes加密及pycryptodome庫(kù)使用的相關(guān)資料,需要的朋友可以參考下2023-10-10
Django學(xué)習(xí)之靜態(tài)文件與模板詳解
這篇文章主要為大家詳細(xì)介紹了Django靜態(tài)文件與模板,使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
flask中使用SQLAlchemy進(jìn)行輔助開(kāi)發(fā)的代碼
在Web.py, Django, Flask, Tornado里,自帶的ORM功能比較缺乏,推薦大家使用SQLAlchemy來(lái)輔助開(kāi)發(fā)2013-02-02
Python定義函數(shù)時(shí)參數(shù)有默認(rèn)值問(wèn)題解決
這篇文章主要介紹了Python定義函數(shù)時(shí)參數(shù)有默認(rèn)值問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
Django ForeignKey與數(shù)據(jù)庫(kù)的FOREIGN KEY約束詳解
這篇文章主要介紹了Django ForeignKey與數(shù)據(jù)庫(kù)的FOREIGN KEY約束詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
OpenCV實(shí)現(xiàn)去除背景識(shí)別的方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了如何利用OpenCV實(shí)現(xiàn)去除背景識(shí)別的功能,文中為大家總結(jié)了一些方法,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下2022-10-10
詳解在Python程序中解析并修改XML內(nèi)容的方法
這篇文章主要介紹了在Python程序中解析并修改XML內(nèi)容的方法,依賴于解析成樹狀結(jié)構(gòu)后的節(jié)點(diǎn)進(jìn)行修改,需要的朋友可以參考下2015-11-11

