使用Python下载不以.mp4结尾的URL视频 解决TikTok下载后仅1KB问题
你遇到的问题和URL是否带.mp4后缀没有任何关系。TikTok的服务器做了基础反爬校验,直接发起无请求头的裸请求时,会被拦截返回异常响应(通常是403禁止访问或校验页面),你写入文件的其实是这部分异常响应的内容,所以大小只有1KB。浏览器能正常播放是因为浏览器发起请求时会自动携带完整的请求头信息,通过了平台的校验。
你只需要在请求中添加模拟浏览器的请求头,绕过基础校验即可,修正后的代码如下:
import requests url = 'https://v16-web.tiktok.com/video/tos/useast2a/tos-useast2a-ve-0068c004/0ba151caee14446eab001fb3ccc80481/?a=1988&br=2336&bt=1168&cd=0|0|1&ch=0&cr=0&cs=0&cv=1&dr=0&ds=3&er=&expire=1636927762&ft=wUyFfFxrkag3-I&l=2021111416083401018907207204E97E43&lr=tiktok_m&mime_type=video_mp4&net=0&pl=0&policy=3&qs=0&rc=MzlqPDY6ZnE2OTMzNzczM0ApZjs3aDg0Zzw4NzQ5ZzpnNGdgMGgvcjRvLzVgLS1kMTZzczEvYzVgYi5iLTEyYi1fYWA6Yw%3D%3D&signature=21d4211038dc54aa92bf68fcc9e71a34&tk=0&vl=&vr=' # 添加模拟浏览器的请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Referer': 'https://www.tiktok.com/' } response = requests.get(url, headers=headers, stream=True) # 先校验请求是否成功 if response.status_code == 200: with open('video.mp4', 'wb') as out_file: # 用迭代写入的方式更适合大文件下载 for chunk in response.iter_content(chunk_size=1024*1024): if chunk: out_file.write(chunk)
如果加了基础请求头还是被拦截,可以把浏览器中请求该视频地址时携带的所有请求头都复制到headers参数中,完全模拟浏览器的请求特征即可。
内容的提问来源于stack exchange,提问作者NeoFahrenheit
相关产品推荐
相关产品推荐

