不多说了,直接上图:
上代码:[Python] 纯文本查看 复制代码 # 抖音火山版无水印下下载
import requests
import re
from tqdm import tqdm # 打印进度条的库
# 忽略警告代码
requests.packages.urllib3.disable_warnings()
# 获取字符串中指定字符
def getMidString(html, start_str, end):
start = html.find(start_str)
if start >= 0:
start += len(start_str)
end = html.find(end, start)
if end >= 0:
return html[start:end]
def getRealUrl(url):
headers = {
'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',
}
# 重定向地址
response = requests.get(url, headers=headers, allow_redirects=False, verify=False)
item_id = getMidString(response.headers["Location"], 'item_id=', '&tag=')
api_url = 'https://share.huoshan.com/api/item/info?item_id=' + item_id
api_response = requests.get(api_url, headers=headers, verify=False).json()
waterMarkVideo = api_response['data']['item_info']['url']
# 替换reflow为resource mark=2为mark=0
noWaterMarkVideo = waterMarkVideo.replace('reflow', 'source').replace('mark=2', 'mark=0')
print('解析完成,视频去水印后的实际地址是:')
print(noWaterMarkVideo)
return noWaterMarkVideo
def videodown(url):
res = requests.get(url, headers={'user-agent': 'chrome'})
total_size = round(int(res.headers["Content-Length"]) / 1024 / 1024)
print('解析完成,视频大小为:' + str(total_size) + 'MB。现在开始下载。')
with open(f'houshan.mp4', 'wb') as f:
for chunk in tqdm(iterable=res.iter_content(1024 * 1024), total=total_size, unit='KB'): \
f.write(chunk)
print('下载完成。')
if __name__ == '__main__':
# huoshanurl = input('请输入火山小视频分享地址:')
# getRealUrl('https://share.huoshan.com/hotsoon/s/y1DoVie0Vk8/')
huoshanurl0 = input('请输入复制的火山小视频的分享链接:') # 如:https://v.douyin.com/JVFp8r5/
huoshanurl = re.findall('https://share.huoshan.com/hotsoon/s/.*?/', huoshanurl0)[0] # 链接解析
# inp = 'https://v.douyin.com/' + inp +'/'
# inp = 'https://v.douyin.com/ewGMnvH/'
print('短视频实际地址是:' + huoshanurl + '。现在开始解析。')
print('解析完成,可点击下列链接打开或下载无水印视频。')
rurl = getRealUrl(huoshanurl)
videodown(rurl)
# exit()
代码中保留了调试步骤,仅作参考。
|