日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python抖音github_使用 Python 下载抖音无水印视频

發(fā)布時間:2025/3/15 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python抖音github_使用 Python 下载抖音无水印视频 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

抖音 APP 中保存到本地就是無水印版本的,所以頭條的服務器肯定是保存有無水印版本的抖音視頻的,所以只要找到接口地址就可以搞定。先在網(wǎng)上搜羅了一圈,確實有人已經(jīng)做了解析,還提供了收費解析服務。

搜索之后發(fā)現(xiàn)又發(fā)現(xiàn)了同類型的其他

http://douyin.iiilab.com/

http://www.dyapp.cc/

https://app886.cn/douyin_video

分析接口

分析這幾個頁面就會發(fā)現(xiàn)他們通過分享的鏈接就能夠拿到視頻的直接鏈接肯定是通過接口獲取的,所以通過 Android 抓包能找到類似下面的接口

https://aweme.snssdk.com/aweme/v1/play/?

video_id=v0200fd80000bejku38697aj8tin1brg

&line=0

&ratio=720p

&watermark=1

&media_type=4

&vr_type=0

&test_cdn=None

&improve_bitrate=0

&version_code=270

這個請求返回狀態(tài)碼是 302,返回的 response header 中 Location 標示了該視頻的真實地址。

后來分析抖音的 Feed 流設(shè)計,又發(fā)現(xiàn)了另外一個接口

https://api.amemv.com/aweme/v1/play/?video_id=v0200fd80000bejhsoir863vmi5add60&line=0&ratio=720p&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0

也類似于上面的接口不過域名不同,參數(shù)也類似。

入手

入手的幾個頁面,分享頁

https://www.iesdouyin.com/share/video/6604280853952466190/?region=CN&mid=6601014204340275975&u_code=df31b2ff&titleType=title

http://v.douyin.com/dqv3dv/

第二條是短鏈接,展開就是上面的長鏈接了。

在分享頁面獲取視頻的 id,然后使用上面的鏈接獲取視頻的播放地址。

大致的思路如下

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import os

import re

from urllib.request import urlopen

import requests

from tqdm import tqdm

class DouyinVideoInfo:

def __init__(self, vid, title='', nickname=''):

self.video_id = vid

self.title = title

self.nickname = nickname

def download(url, filename, name):

"""

:param url: 視頻直接鏈接

:param filename: 保存文件名

:param name: 進度條內(nèi)容

:return:

"""

file_size = int(urlopen(url).info().get('Content-Length', -1))

if os.path.exists(filename):

first_byte = os.path.getsize(filename)

else:

first_byte = 0

if first_byte >= file_size:

return file_size

header = {"Range": "bytes=%s-%s" % (first_byte, file_size),

'User-Agent': 'okhttp/3.10.0.1'}

pbar = tqdm(total=file_size, initial=first_byte,

unit='B', unit_scale=True,

desc=name)

req = requests.get(url, headers=header, stream=True)

with(open(filename, 'wb')) as f:

for chunk in req.iter_content(chunk_size=1024):

if chunk:

f.write(chunk)

pbar.update(1024)

pbar.close()

return file_size

def down_by_vid(info: DouyinVideoInfo):

r = requests.get('https://api.amemv.com/aweme/v1/play/', params={

'video_id': info.video_id,

'line': 0,

'ratio': '720p',

'watermark': 0,

'media_type': 4,

'vr_type': 0,

'test_cdn': 'None',

'improve_bitrate': 0,

'logo_name': 'aweme'

}, headers={

'Host': 'api.amemv.com',

'sdk-version': '1',

'X-SS-TC': '0'

}, allow_redirects=False)

print(r.headers['Location'])

download(r.headers['Location'], '{}.mp4'.format(info.video_id), info.title)

def get_video_info(long_url) -> DouyinVideoInfo:

Headers = {

'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'accept-encoding': 'gzip, deflate, br',

'accept-language': 'zh-CN,zh;q=0.9',

'cache-control': 'max-age=0',

'upgrade-insecure-requests': '1',

'user-agent': 'Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; MI 4S Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/9.1.3',

}

r = requests.get(long_url, headers=Headers)

video_id = re.findall("(?<=video_id=).+?(?=&amp)", r.text)[0]

title_name = re.findall("(?<=desc\">).+?(?=

)", r.text)[0]

nick_name = re.findall("(?<=bottom-user\">).+?(?=

)", r.text)[0]

info = DouyinVideoInfo(video_id, title_name, nick_name)

return info

if __name__ == '__main__':

d1 = 'https://www.iesdouyin.com/share/video/6604280853952466190/?region=CN&mid=6601014204340275975&u_code=df31b2ff&titleType=title'

d2 = 'https://www.douyin.com/share/video/6536906252729978119/?region=CN&mid=6441083920867035918&titleType=title&timestamp=1522052360&utm_campaign=client_share&app=aweme&utm_medium=ios&iid=27151889375&utm_source=copy'

info = get_video_info(d2)

down_by_vid(info)

總結(jié)

以上是生活随笔為你收集整理的python抖音github_使用 Python 下载抖音无水印视频的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。