整点有用的 -- 爬虫爬取美剧

起因

本来只是想单纯的看一下美剧,二刷一下mr robot,然后找到它家的网站

image.png

在我看到一半的不小心按到了f12(真的是不小心),它就弹出来一个窗口

image.png

我知道得太多了,。。。呀哟,先不说我是不是故意的吧,我这个君子你也防?

我的叛逆心里一下就上来了,你不让我看是吧, 我非要整!我非得给你爬下来不可

过程

看页面源码,找到了iframe标签

image.png

其中的scr属性是它包含的其他页面,跟进去看

image.png

直接视频页面,完美~~

这里就没有F12的防护了,嘿嘿嘿

image.png

发现它视频的video标签是用的blob: https://xxx这样流式模式,一般这种视频的文件格式是m3u8

去看它的流量包验证一下

image.png

果然是这样,直接访问下载下来打开

image.png

可以看到里面的ts文件跟网络包里的ts文件一样

image.png

基本可以确定都是从这里down下来的了

ok知道api了就可以爬啦~~此贴完结~


然而并没有那么简单,当我以为简简单单拿下,用py脚本去请求的时候,缺出现了异样。。。

image.png

状态码403,why????我是直接复制浏览器的报文,怎么会这样?被ban了?

image.png

可是浏览器也可以

我直接把py请求到的响应包打印出来看看

image.png

果然,样式不对。我用上chromedrive浏览器看看

image.png

果然不是正经的浏览器就会被拦截

行吧,既然你一个破站防得这么狠,那我一定要拿下你

现已知

  1. 无法使用程序发包

    解法:不能用程序访问就用浏览器访问

  2. 无法使用无头浏览器去访问

    解法:不能用无头浏览器去访问就用正常的浏览器去访问

使用go-rod给无头浏览器启用户模式即可访问

image.png

然后再用xpath去获取iframe文件的url,再用正则截取url里的m3u8文件的url

image.png

image.png

然后用浏览器访问就会直接下载下来,然后再读取文件内容,获取ts文件url部分

image.png

虽然这样虽然可以访问了,但是请求的时候还是会被触发它的反扒机制

image.png

经过我多次实验,我用go-rod请求的时候都是直接从空白页面请求的页面才会会触发这个反扒,我从其他页面请求就不会触发反扒。这就触到我的知识盲区了,不知道这个是什么原理

既然你会在空白页面请求反扒我那我,另辟蹊径使用js直接在它的页面直接新打开一个页面

image.png

这样就算触发反扒也能重新打开页面然后继续开始爬取了。

把每集的ts文件down下来,然后再进行合并成mp4就可以看视频啦

bb4b1f8190a4431ea6ce20cf1778e08.jpg

image.png

美剧每集都很长,所以 会有很多ts文件,所以我都是下完一个ts文件就直接读取到mp4文件里

image.png

这样就可以确保不会错乱ts文件顺序导致视频错乱

image.png

image.png

理论上只要这个站点的模板页面模板没换,其他剧基本都可以爬下来

😋

结尾

附上源码

spider-master.zip