|
浏览器打开一个视频页面,样爬页视按下F12,取网切到Network面板,样爬页视刷新。取网你会看到一堆请求飞过去,样爬页视其中某个请求返回的取网文件特别大——那多半就是视频本体。这不是样爬页视什么高深技术,只是取网大多数人没想过可以这样看。 爬取网页视频的样爬页视核心逻辑就一句话:找到视频文件的真实URL,然后把它下载下来。取网难的样爬页视地方在于,不同网站把视频藏在不同位置,取网有的样爬页视藏在HTML源码里,有的取网藏在JavaScript变量中,有的样爬页视干脆切成无数个小片段,用m3u8播放列表串起来。 先搞清楚视频是怎么送到你面前的 最简单的情况:网页源码里直接有个<video src="xxx.mp4">。右键查看页面源代码,Ctrl+F搜“.mp4”,大概率能直接找到。这种网站现在不多了,但一些小型站点、个人博客还在用这种方式。 稍微复杂一点的,视频地址写在JavaScript里。你搜“.mp4”可能什么都搜不到,因为地址是拼接出来的。这时候打开Network面板,按Media筛选,刷新页面,看有没有请求类型为media的条目。有的话,右键复制URL,丢进下载工具就行。 再复杂一层:m3u8。这是苹果搞的HLS协议,把一整个视频切成几百上千个ts小文件,用一个m3u8索引文件记录播放顺序。你在Network面板里看到的不是一个大文件,而是一连串小请求。直接下载m3u8文件,里面全是ts片段的地址。想合并成完整视频,得用ffmpeg: ffmpeg -i "https://example.com/index.m3u8" -c copy output.mp4 这条命令会自己把片段拉下来拼好,省得你手动操作。 几个实际会遇到的问题 有些网站会检测请求头里的Referer和User-Agent。你直接拿URL去下载,服务器返回403。解决办法是用curl带上正确的头信息: curl -H "Referer: https://example.com" -H "User-Agent: Mozilla/5.0..." -o video.mp4 "https://cdn.example.com/video.mp4" 我上次帮朋友下载一个在线课程的视频,就是卡在Referer校验上。浏览器里能播,wget就是403。加上Referer之后立刻正常。 还有一种情况是视频被加密了。m3u8文件里会有#EXT-X-KEY字段,指向一个密钥文件。你得先把密钥下下来,再用ffmpeg解密合并。这个稍微麻烦一点,但原理不复杂——密钥就是个字符串,m3u8里会告诉你加密方式(通常是AES-128)和IV值。 工具能省事,但原理得懂 yt-dlp是目前最好用的命令行下载工具,支持上千个网站。装好后一行命令: yt-dlp "https://www.example.com/video-page" 它会自动分析页面、找到视频流、选择最佳画质、下载并合并。但有些小众网站它不支持,这时候还是得自己动手分析。浏览器插件像Video DownloadHelper也能用,不过遇到m3u8加密流经常歇菜。 我的建议是:先试yt-dlp,不行再手动抓。手动抓的过程其实就是理解HTTP请求和视频流协议的过程,搞明白一次,以后遇到新网站也能举一反三。 最后提醒一句:下载视频自己看看没问题,别拿去传播或者商用。很多视频有版权保护,技术本身中立,怎么用是另一回事。 |