爬视频网站,爬取频技术上分三层:抓页面、视频找真实地址、网站下载。爬取频多数人卡在第二层——浏览器里能播的视频视频,地址却藏在几十个请求里。网站
先讲个反例。爬取频有人直接用Python的视频requests库去GET视频页面,拿回来的网站HTML里根本没有mp4链接。现在的爬取频网站早就不这么干了。视频地址是视频动态加载的,藏在JavaScript发起的网站XHR请求里。你得打开浏览器的爬取频开发者工具,切到Network面板,视频刷新页面,网站盯着那些类型为media或xhr的请求,一个一个点开看。运气好,直接能看到一个带.mp4或.m3u8后缀的URL。运气不好,那是个加密的blob链接,你只能看到一段乱码。
拿到直链后,下载就没啥技术含量了。用ffmpeg命令行工具,一条ffmpeg -i "视频URL" -c copy output.mp4就能搞定。但这里有个细节——很多网站会做Referer校验,直接拿URL去下载会返回403。你得在请求头里伪造一个Referer,填成视频所在页面的地址。这招能骗过八成的小网站。
剩下两成大网站,比如B站、YouTube,就得上点硬功夫。它们的视频被切成几百个ts分片,通过m3u8索引文件串联起来。这时候你需要用youtube-dl或yt-dlp这类现成工具。别觉得用工具丢人,这些开源项目把反爬逻辑都写好了,比你从零研究要靠谱得多。我见过有人花两周时间逆向某个网站的加密算法,最后发现yt-dlp三天前就支持了这个网站。
还有个容易踩的坑——模拟登录。有些视频非要登录才能看,你以为登录完拿到cookie就万事大吉,结果发现cookie里带了个动态token,每五分钟失效一次。这种时候别硬刚,换个思路:用无头浏览器(比如Playwright)模拟真实用户操作,让它自己跑完登录、点击播放、等视频加载完,再截获浏览器发出的最后一个请求。这法子笨,但最通用。
最后提醒一句,爬视频这事儿灰色地带多。个人学习用,下几个教学视频没人管你。但别批量爬人家的独家内容去二次分发——去年有个站长就是这么被索赔到关站的。技术本身没对错,但用技术的人得有个度。