如何用Python下载CDN开头的视频URL?请求返回HTML而非视频
解决Requests下载视频返回HTML的问题
我帮你分析下这个问题,大概率是网站的基础反爬机制在起作用,或者你代码里的URL和目标视频不一致导致的,下面是具体的解决方法:
1. 先修正视频URL
你提到要下载的视频是//cdn.muscleandstrength.com/video/reversegripbentoverdumbbellrow.mp4,但代码里用的却是https://www.muscleandstrength.com/video/highinvertedrow.mp4,这两个是完全不同的资源。首先要确认你要下载的正确视频URL,建议把代码里的URL替换成目标视频的完整HTTPS链接:https://cdn.muscleandstrength.com/video/reversegripbentoverdumbbellrow.mp4。
2. 添加浏览器请求头,绕过基础反爬
很多视频网站会检测请求的User-Agent字段,如果发现请求不是来自浏览器,就会返回HTML页面而非视频资源。我们只需要在请求里添加模拟浏览器的请求头即可:
import requests # 替换为你要下载的正确视频URL video_url = "https://cdn.muscleandstrength.com/video/reversegripbentoverdumbbellrow.mp4" # 模拟Chrome浏览器的请求头,你也可以换成其他浏览器的UA headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } # 发起请求时携带请求头 response = requests.get(video_url, headers=headers, allow_redirects=True) # 先验证响应是否为视频类型 if response.status_code == 200 and "video/mp4" in response.headers.get("Content-Type", ""): with open("data/video.mp4", 'wb') as file: file.write(response.content) print("视频下载完成!") else: print(f"请求异常:状态码{response.status_code},返回内容类型为{response.headers.get('Content-Type')}")
3. 如果还是不行的排查方向
如果添加请求头后仍然返回HTML,可能是网站有更严格的反爬措施:
- 检查是否需要携带登录后的Cookie(比如网站需要登录才能查看视频)
- 确认视频是否是动态加载的(比如通过JavaScript生成真实视频地址,这种情况需要用Selenium或Playwright等工具模拟浏览器行为获取真实URL)
- 尝试使用
stream=True参数分块下载大视频,避免请求超时
内容的提问来源于stack exchange,提问作者Bex T.
相关产品推荐
相关产品推荐

