前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 以下文章来源于Python七号 ,作者 somenzz Python爬虫、数据分析、网站开发等案例教程视频免费在线观看 上次写了用 Python 批量下载知乎视频的方式,这次分享用 Python 批量下载抖音个人主页的全部无水印视频,本文重点不是提供一个好用的脚本,而是讲述如何写出这样的脚本,正所谓授人以鱼,不如授人以渔,所谓的爬虫,基本都是这个套路。 思路 先说下思路,要批量下载视频,可以先尝试成功下载一个,确定没有水印,然后在写一个循环进行批量下载。 难点:下载一个视频可能很简单,但下载多个就稍微有点复杂,需要抓取多个视频对应的 url,抖音这块做了防爬措施,只允许手机上看到个人主页的视频列表,电脑端的网页却看不到,这就需要抓取手机的 https 包,这里借助 Burpsuite 进行抓包。 这里用到了 Burpsuite ,因此我把自己常用的 Burpsuite 2.1.06 专业版放在了网盘里面,公众号「Python七号」回复「burp」获取,下载后运行start_burp.bat或sh start_burp.sh即可一键启动,无需购买许可,非常方便。 爬取单个视频 找一个抖音视频链接,点击分享,复制链接,在电脑上用打开,然后打开开发者工具,点击 network 选项。 刷新,看接口,找到返回值里有播放地址的接口: 这里面有个 play_addr,内部有个 urllist,我们复制这个 urllist[0] 在浏览器打开,网站跳转到了真正的播放地址,同时可以看到下载的按钮: 下载这个视频,发现是带水印的,如何下载到不带水印的视频呢?网上搜索了下,方法就是将上述 urllist[0] 中的 playwm 改成 play 就可以了。 然后开始写代码,获取这个 urllist[0],并下载 重构后的代码如下:

def get(share_url):
"""
Retrieves the TikTok video sharing url.
Args:
share_url (str): The TikTok video sharing url.
Returns:
dict: A dictionary containing the URL, title, and format of the TikTok video.
"""
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 = f"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={share_url}"
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, 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
elif __name__ == '__main__':
videos = get(share_url)
for video in videos:
downloader.download(video['url'], video['title'], video['format'], './download')
data.append(tmp)
return data

在探索抖音视频下载的过程中,我们遇到了一些挑战。最初,我们专注于单个视频的下载,但随后需要处理大量链接时,发现抖音对从浏览器直接访问多个视频内容进行了限制。为了解决这个问题,我们转向了使用手机应用程序(如抖音App)来抓取数据,因为这样可以绕过浏览器的限制。 接下来,我分享一下如何使用BurpSuite来模拟和抓取手机上的HTTP请求。首先,我们需要运行Burp并配置代理,以便BurpSuite能够连接到运行Burp的机器。然后,在手机上设置代理,确保BurpSuite能够与手机建立连接。接着,在手机上下载并安装BurpSuite的证书,并将其设置为信任。最后,通过设置BurpSuite的中断,我们可以阻止来自前端的请求,使抖音App中的数据逐步呈现。 通过这些步骤,我们成功地实现了从手机APP上抓取抖音视频链接的功能,并且可以循环处理这些链接。这种方法不仅适用于抖音,也适用于其他可能采取类似限制措施的应用。 首先,打开 BurpSuite 的 Repeater 选项卡,可以发现之前发送的请求已经被列出。此时,选择重放该请求,并观察数据以确定所需的接口。如下图所示: 通过分析接口的 URL、headers 中的参数以及 User-Agent 参数,我们可以区分客户端是浏览器还是应用程序,这对于模拟请求和获取所需下载链接至关重要。 由于 URL 中包含大量参数,其中一些是固定的,而另一些则根据不同用户的主页参数而变化。如果仅用于个人使用,可以通过正则表达式提取这些 URL 链接,并进行批量下载。 最后,要成功爬取视频,关键在于找到视频的播放地址。有了播放地址后,即使不编写代码,也可以使用浏览器进行下载。此外,还需要考虑是否能去除水印。如果需要批量下载,就需要知道如何获取更多视频链接。在浏览器抓取不到的情况下,可以考虑使用 BurpSuite 抓取手机流量包,进一步提取接口的数据,或者模拟手机请求。对于爬虫爱好者来说,BurpSuite 是一个功能强大的工具,非常实用。 如果本文对您有所帮助,请点赞或分享以表达支持。谢谢!