Python批量下载抖音无水印视频的原理与实现
本文详解如何使用Python批量下载抖音个人主页的无水印视频。核心思路是通过BurpSuite抓取手机App的HTTPS请求,分析获取视频列表的API接口。文章介绍了从单个视频去水印技巧到批量抓取链接的完整流程,重点讲解如何模拟手机请求以绕过网页端的限制,为开发自动化下载脚本提供技术参考。
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
以下文章来源于Python七号,作者somenzz
Python爬虫、数据分析、网站开发等案例教程视频免费在线观看
https://space.bilibili.com/523606542
此前曾介绍过使用Python批量下载知乎视频的方法,本文将重点分享如何通过Python批量下载抖音个人主页中所有无水印视频。本文的核心目的并非提供一个开箱即用的脚本,而是阐述编写此类脚本的技术思路,即“授人以渔”。爬虫开发通常遵循这一通用套路。
思路
实现批量下载的基本逻辑是:首先成功下载单个视频并确认其无水印,随后编写循环代码以批量处理多个视频。
主要难点在于:下载单个视频相对简单,但批量下载需要获取多个视频对应的URL。抖音平台设有反爬机制,仅在手机App的个人主页展示视频列表,电脑网页端则无法直接查看。因此,我们需要抓取手机端的HTTPS数据包,此处推荐使用BurpSuite工具进行抓包分析。

本文使用了BurpSuite,为方便读者操作,作者已将常用的BurpSuite 2.1.06专业版上传至网盘。关注公众号“Python七号”并回复关键词“burp”即可获取下载链接。下载后,运行start_burp.bat(Windows)或sh start_burp.sh(Linux/Mac)即可一键启动,无需购买正式许可,使用便捷。
爬取单个视频
- 选取一个抖音视频链接,点击“分享”并复制链接,在电脑浏览器中打开该链接,随后打开浏览器的开发者工具,切换到Network(网络)选项卡。
- 刷新页面,观察网络接口请求,找到返回值中包含播放地址的接口。

在返回数据中,存在一个play_addr字段,其内部包含urllist列表。复制urllist[0]的值并在浏览器中打开,页面会跳转至真实的播放地址,同时可以看到下载按钮。

直接下载该视频会发现带有水印。经网络搜索验证,去除水印的方法是将上述urllist[0]中的“playwm”参数修改为“play”即可。
接下来编写代码,获取该urllist[0]并执行下载操作。
def get(share_url) -> dict:
"""
share_url -> 抖音视频分享url
返回格式 [{'url':'', 'title','format':'',},{}]
"""
data = []
headers = {
'accept': 'application/json',
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
}
api = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={item_id}"
rep = requests.get(share_url, headers=headers, timeout=10)
if rep.ok:
# item_id
item_id = re.findall(r'video/(\d+)', rep.url)
if item_id:
item_id = item_id[0]
# video info
rep = requests.get(api.format(item_id=item_id), headers=headers, timeout=10)
if rep.ok and rep.json()["status_code"] == 0:
info = rep.json()["item_list"][0]
tmp = {}
tmp["title"] = info["desc"]
#去水印的视频链接
play_url = info["video"]["play_addr"]["url_list"][0].replace('playwm', 'play')
tmp["url"] = play_url
tmp["format"] = 'mp4'
def get(share_url) -> dict:
"""
share_url -> 抖音视频分享url
返回格式 [{'url':'', 'title','format':'',},{}]
"""
data = []
headers = {
'accept': 'application/json',
'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
}
api = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={item_id}"
rep = requests.get(share_url, headers=headers, timeout=10)
if rep.ok:
# item_id
item_id = re.findall(r'video/(\d+)', rep.url)
if item_id:
item_id = item_id[0]
# video info
rep = requests.get(api.format(item_id=item_id), headers=headers, timeout=10)
if rep.ok and rep.json()["status_code"] == 0:
info = rep.json()["item_list"][0]
tmp = {}
tmp["title"] = info["desc"]
#去水印的视频链接
play_url = info["video"]["play_addr"]["url_list"][0].replace('playwm', 'play')
tmp["url"] = play_url
tmp["format"] = 'mp4'
data.append(tmp)
return data
if __name__ =='__main__':
videos = get('https://www.iesdouyin.com/share/video/6920538027345415431/?region=&mid=6920538030852885262&u_code=48&titleType=title&did=0&iid=0')
for video in videos:
downloader.download(video['url'],video['title'],video['format'],'./download') data.append(tmp)
return data
if __name__ =='__main__':
videos = get('https://www.iesdouyin.com/share/video/6920538027345415431/?region=&mid=6920538030852885262&u_code=48&titleType=title&did=0&iid=0')
for video in videos:
downloader.download(video['url'],video['title'],video['format'],'./download')
此处使用的downloader.download函数与前文知乎视频下载中使用的函数一致,故不再重复展示代码。
获取个人主页视频链接
前两步已实现单个抖音视频的无水印下载,现在的目标是找到大量此类链接,通过循环即可实现批量下载。
打开任意一个大V的个人主页,点击“分享”复制链接,在电脑浏览器中打开,此时无法看到任何视频;而使用抖音App打开同一链接,则可以看到完整的视频列表。

浏览器端显示效果

抖音App端显示效果
这表明抖音实施了限制措施,防止通过浏览器获取多个视频信息。此时需要学习如何从手机App进行抓包,分析手机发起的HTTP请求,进而通过程序模拟这些请求。
BurpSuite(以下简称Burp)是一款极为实用的工具,下面简要分享其使用方法。
1、启动Burp
下载并运行start_burp.bat或sh start_burp.sh启动Burp,随后进入代理设置(Proxy Settings),将监听地址绑定到运行Burp的机器IP,具体配置如下图所示。

注意:不要将IP设置为127.0.0.1,否则仅本地请求可使用代理,手机设备将无法连接此代理。
2、配置手机代理
确保手机与电脑连接同一Wi-Fi网络。以iPhone为例,操作路径为:设置 -> 无线局域网 -> 点击当前Wi-Fi右侧的“i”图标 -> 向下滚动点击“配置代理” -> 设置为与BurpSuite相同的IP和端口。Android手机的设置步骤类似。完成配置后,即可在BurpSuite上抓取手机的HTTP流量。
3、手机下载Burp证书并设置信任
在手机浏览器中访问http://burp,点击“CA”下载证书。随后在iPhone上执行:设置 -> 通用 -> 描述文件 -> 点击“PortSwigger CA” -> 安装。接着进入:设置 -> 通用 -> 关于本机 -> 证书信任设置,开启BurpSuite的证书信任。
完成上述步骤后,即可抓取手机上发起的HTTPS数据包。
4、设置BurpSuite中断(Intercept)

此步骤设置后,手机发出的请求将在Burp中阻塞。你可以选择放行(Forward)请求,或修改数据包后放行,也可发送至Repeater模块以便后续重放。需注意,来自前端的请求均不可信。
此时打开手机上的抖音App,Burp中会出现大量阻塞的请求。选择放行后,抖音App内的数据将逐步加载。在快速滑动至个人主页视频列表前,将相关请求发送至Repeater模块,如下图所示。

打开BurpSuite的Repeater选项卡,可以看到刚才发送的请求。选择重放(Send)以查看数据,从而确定需要使用的接口,如下图所示。

分析发现该接口满足需求。通过查看接口的URL及Headers中的各项参数,特别是User-Agent参数(用于区分客户端是浏览器还是App),可以编写代码模拟请求,进而获取所需的批量下载链接。
由于URL中包含大量参数,部分参数固定不变,部分则随不同用户主页而变化。若仅用于个人使用,可通过正则表达式简单提取这些URL链接,进而实现批量下载。
若希望编写供他人使用的通用脚本,则需进行更复杂的工作:查阅更多API以确定URL及Headers中参数的获取或生成逻辑,并编写脚本自动化这一过程。某些情况下还涉及加密混淆等反爬措施,此处不再展开,感兴趣的读者可自行探索。
最后的话
爬取视频的关键在于找到视频的播放地址。拥有播放地址后,即使不编写代码,也可通过浏览器直接下载。然而,仅找到播放地址尚不足够,还需考虑去水印问题。若需批量下载,则必须掌握获取更多视频链接的方法。当浏览器无法抓取时,可考虑使用BurpSuite抓取手机流量包,进一步提取接口数据或模拟手机请求。对于爬虫开发者而言,BurpSuite堪称瑞士军刀,极具实用价值。
如果本文对你有所帮助,请点个赞或在看,谢谢支持。
到此这篇关于使用Python下载抖音各大V视频的思路详解的文章就介绍到这了,更多相关Python下载抖音视频内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













