浏览器里打开目标页面,扒网按下F12,页视这动作比点右键看源代码快得多。扒网我盯着的页视不是那些花里胡哨的HTML标签,直接切到Network面板,扒网刷新页面,页视看它发了哪些请求。扒网视频网站一般会把mp4文件藏在一个叫media或video的页视请求里,后缀名骗不了人。扒网
但很多站点没那么老实,页视给你返回一堆blob:开头的扒网地址,那是页视分片流媒体。这时候得看XHR请求,扒网找m3u8或者mpd文件——前者是页视苹果的HLS协议,后者是扒网谷歌的DASH,国内视频站十有八九用的是m3u8。点开那个m3u8的响应内容,里面是一串.ts结尾的地址,这就是视频被切成的小碎片。
有人这时候就慌了,觉得要写代码才能拼起来。其实不用,浏览器地址栏直接访问那个m3u8链接,能下载下来。下载完是个文本文件,几百KB,里面全是.ts的URL。麻烦在于这些.ts文件有几百个,手动下载得点到手抽筋。我一般用命令行工具ffmpeg,一行指令就能把列表里的碎片合成完整视频:ffmpeg -i "列表.m3u8" -c copy 输出.mp4。这工具免费开源,Windows和Mac都能装。
更刁钻的情况是视频被加密了。m3u8文件里如果出现#EXT-X-KEY标签,后面跟着一串十六进制字符,那就是AES加密的密钥。这时候直接下载.ts文件拼出来的全是花屏。得从JavaScript代码里找那个密钥——切到Sources面板,搜索"key"或者"decrypt",运气好能在某个JS文件里看到明文密钥。有些站点把密钥放在请求的响应头里,那更简单,Network面板里点开那个key请求就能看到。
别急着高兴,还有更狠的。有的视频压根不走HTTP协议,用的是WebSocket实时推流,比如某些直播平台的回放。这种得在Network面板里过滤WS类型的请求,看到一堆二进制帧乱码别慌,右键点击那个WebSocket连接,选"Save as HAR file with content",然后用Wireshark打开HAR文件,里面能提取出裸的H.264数据流。这招比较硬核,但对付那些防扒得最严的站点反而有效。
扒下来的视频记得检查一下完整性。我遇到过拼接完发现音画不同步的,多半是源站的分片时长不统一。用ffprobe查看输出文件的流信息,如果音频流和视频流的时长差超过0.5秒,就得重新用-c:a aac -b:a 192k转码一次音频流,牺牲点画质换同步。至于那些连m3u8都找不到的站点,多半是用WebRTC点对点传输,这种就别折腾了,直接录屏吧——不是所有视频都值得你花两小时去扒。
最后提醒一句,扒下来的视频自己看看就行,别二次上传。有些平台的防盗链机制会定期扫描外泄内容,真追究起来,那点技术快感抵不上法律风险。