整点有用的 -- 爬虫爬取美剧
起因
本来只是想单纯的看一下美剧,二刷一下mr robot
,然后找到它家的网站
在我看到一半的不小心按到了f12(真的是不小心),它就弹出来一个窗口
我知道得太多了
,。。。呀哟,先不说我是不是故意的吧,我这个君子你也防?
我的叛逆心里一下就上来了,你不让我看是吧, 我非要整!我非得给你爬下来不可
过程
看页面源码,找到了iframe
标签
其中的scr
属性是它包含的其他页面,跟进去看
直接视频页面,完美~~
这里就没有F12
的防护了,嘿嘿嘿
发现它视频的video
标签是用的blob: https://xxx
这样流式模式,一般这种视频的文件格式是m3u8
的
去看它的流量包验证一下
果然是这样,直接访问下载下来打开
可以看到里面的ts
文件跟网络包里的ts
文件一样
基本可以确定都是从这里down
下来的了
ok知道api
了就可以爬啦~~此贴完结~
然而并没有那么简单,当我以为简简单单拿下,用py
脚本去请求的时候,缺出现了异样。。。
状态码403
,why????我是直接复制浏览器的报文,怎么会这样?被ban了?
可是浏览器也可以
我直接把py
请求到的响应包打印出来看看
果然,样式不对。我用上chromedrive
浏览器看看
果然不是正经的浏览器就会被拦截
行吧,既然你一个破站防得这么狠,那我一定要拿下你
现已知
-
无法使用程序发包
解法:不能用程序访问就用浏览器访问
-
无法使用无头浏览器去访问
解法:不能用无头浏览器去访问就用正常的浏览器去访问
使用go-rod给无头浏览器启用户模式即可访问
然后再用xpath
去获取iframe
文件的url
,再用正则截取url
里的m3u8
文件的url
然后用浏览器访问就会直接下载下来,然后再读取文件内容,获取ts
文件url
部分
虽然这样虽然可以访问了,但是请求的时候还是会被触发它的反扒机制
经过我多次实验,我用go-rod请求的时候都是直接从空白页面请求的页面才会会触发这个反扒,我从其他页面请求就不会触发反扒。这就触到我的知识盲区了,不知道这个是什么原理
既然你会在空白页面请求反扒我那我,另辟蹊径使用js
直接在它的页面直接新打开一个页面
这样就算触发反扒也能重新打开页面然后继续开始爬取了。
把每集的ts
文件down
下来,然后再进行合并成mp4
就可以看视频啦
美剧每集都很长,所以 会有很多ts
文件,所以我都是下完一个ts
文件就直接读取到mp4
文件里
这样就可以确保不会错乱ts
文件顺序导致视频错乱
理论上只要这个站点的模板页面模板没换,其他剧基本都可以爬下来
😋
结尾
附上源码
要不你放网盘里,放个链接?
ok
三连了
可以使用ffmpeg来下载这类m3u8的视频流,会更加方便
bula大佬牛皮
...不是说了吗?不是浏览器的请求会被拦截
m3u8类的视频可以搞个插件直接下载并转成MP4了,我之前也是爬虫去爬,每个页面都要改代码太烦了😄
Chrome 的 stream record插件,只要不加密,都能下载
Referer?