大家我是老李。
今天跟大家唠唠我最近搞的一个小项目,暂且就叫它“针锋”,听着是不是有点意思?哈哈,就是个简单的自动化脚本,但过程那叫一个曲折离奇!
事情是这样的,最近我不是迷上了刷短视频嘛但有些视频,它就是不让你下载,只能在线看,这让我这种喜欢把好东西存下来的人简直不能忍!于是我就琢磨着能不能自己写个脚本,把这些视频给扒下来。
说干就干!
我得先搞清楚视频的地址在哪。打开浏览器的开发者工具,开始抓包!
- 刷新页面,仔细观察网络请求,一个一个排查。
- 诶,果然让我找到了!一个以`.mp4`结尾的请求,八成就是它了!
拿到视频地址,接下来就是下载了。这还不简单?Python 的 `requests` 库,一把梭!
python
import requests
video_url = "视频地址" # 替换成你抓到的视频地址
response = *(video_url, stream=True)
with open("*4", "wb") as f:
for chunk in *_content(chunk_size=8192):
if chunk:
*(chunk)
代码很简单?直接 `*` 请求视频地址,然后一点一点地写入文件。我满心欢喜地运行了脚本,结果……
下载下来的视频,打不开!
WHAT?这怎么可能?我检查了代码,没发现什么问题。难道是视频地址有问题?我又重新抓包,确认地址没错。这下我有点懵了。
没办法,只能上网查资料。Google 了一番,发现原来有些网站为了防止被恶意下载,会对视频做一些处理,比如加一些防盗链的参数,或者对请求头做一些限制。
看来我的脚本还不够“聪明”,得让它伪装得更像一个正常的浏览器才行。
于是我开始修改代码:
- 加上 `User-Agent`,模拟浏览器发送请求。
- 加上 `Referer`,告诉服务器我是从哪个页面过来的。
- 甚至还加上了 `Cookie`,模拟用户的登录状态。
python
import requests
video_url = "视频地址" # 替换成你抓到的视频地址
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
"Referer": "视频来源页面地址", # 替换成视频来源页面的地址
"Cookie": "你的Cookie" # 替换成你的Cookie
response = *(video_url, stream=True, headers=headers)
with open("*4", "wb") as f:
for chunk in *_content(chunk_size=8192):
if chunk:
*(chunk)
再次运行脚本,这回终于成功了!视频可以正常播放了!
但是,新的问题又来了。有些视频,它不是一个完整的 `.mp4` 文件,而是分成很多小的片段,然后通过一个 `m3u8` 文件来描述这些片段的播放顺序。
这下更麻烦了!我得先解析 `m3u8` 文件,拿到所有视频片段的地址,然后一个一个下载下来,再把它们合并成一个完整的视频。
这可不是一件容易的事情,需要用到一些专门的库,比如 `m3u8` 和 `ffmpeg`。
python
import m3u8
import requests
import subprocess
m3u8_url = "m3u8文件地址" # 替换成m3u8文件的地址
response = *(m3u8_url)
m3u8_obj = *(*)
ts_urls = [* for segment in m3u8_*]
with open("ts_*", "w") as f:
for ts_url in ts_urls:
*(ts_url + "\n")
# 使用ffmpeg合并ts文件
cmd = "ffmpeg -f concat -safe 0 -i ts_* -c copy *4"
*(cmd, shell=True)
代码稍微复杂了一些,简单解释一下:
- 使用 `*` 解析 `m3u8` 文件,拿到所有视频片段的地址。
- 然后,把这些地址保存到一个文本文件 `ts_*` 中。
- 使用 `ffmpeg` 命令,读取 `ts_*` 文件,把所有视频片段合并成一个完整的 `*4` 文件。
这个过程耗时比较长,需要耐心等待。但结果是值得的,我终于成功地把这些“顽固”的视频都扒了下来!
这回实践,让我深刻体会到,没有什么事情是一帆风顺的,总会遇到各种各样的挑战。关键是要保持耐心,不断学习,不断尝试,才能最终克服困难,取得成功。
这个脚本还有很多可以改进的地方,比如:
- 可以加上多线程下载,提高下载速度。
- 可以加上自动重试机制,防止下载中断。
- 可以加上图形界面,让操作更方便。
这回“针锋”行动,虽然过程曲折,但结果还是令人满意的。也希望我的分享,能对大家有所帮助。
好了,今天就先聊到这里,下次再见!
后记
偷偷告诉你们,我还遇到了一个更棘手的问题,有些网站会对视频进行加密,即使你拿到了视频片段的地址,也无法正常播放。这种情况下,就需要用到一些更高级的解密技术了。不过这已经超出了我的能力范围,只能暂时放弃了。也许以后有机会,我会再来挑战一下!
还没有评论,来说两句吧...