某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

开始 
此网站F费与M费通道共用,搞定M费通道即可 。
 
确立目标网址:点击进入

某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
 
 
进入到跳转页面:
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
?
 
可以看到出现了咱们需要的一些音乐
 
分析(x0) 
这些音乐的源文件地址是否在咱们的网页元素中,然后再查看网页源代码中是否有咱们需要的内容 。(注:网页元素与网页源代码不一定是一样的,网页元素是经过浏览器渲染后的源代码,而源代码纯粹就是服务器给咱们传送过来的原始数据)
 
网页元素中只有封面图片的资源,没用音频源文件地址:
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
?
 
网页源代码中同样没有咱们需要的内容:
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
?
 
分析(x1) 
其实没有才正常(这种大型网站的数据不会让你这么轻易抓取)....不过是带大家走一遍流程,对别的网站也要这样分析
 
那么咱们开始播放音乐抓包,看是否能抓到数据:
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
?
 
果然是经过触发播放按钮后,服务器传给咱们客户端的 。(ajax)
 
而咱们抓到的这个源文件地址
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
除了这两段外,其它的应该都是固定死的 。
 
分析(x2) 
那么我假设这两段是从我开始访问这首歌曲页面的时候生成的,比如后面那串数字为这首音乐在服务器数据库中的对应的一个ID值呢?
 
假设是合理的,不过由于咱们前面已经查看过源代码和网页元素中找不到这些值,我就不在这里浪费时间了 。
 
分析(x3) 
这里我和大家讲一下,咱们向服务器发送一个网址请求,服务器给咱们返回的可不止一个数据包,一般都是N个数据包 。当我们看到源代码中没有时候,也许它正悄悄地通过Ajax传给我们了?
 
Ajax在网上有很多的解释,但是大家未必能理解 。从服务器获得源代码数据,然后通过浏览器渲染执行JAVAScript获得一些数据(音乐) 。
 
这样说大家应该就懂了,那么咱们开始抓当前页面的包:
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
?
 
Ajax异步请求的数据,都会在XHR中 。所以直接筛选就好了 。这个包我已经抓到了,get请求然后看下返回的值 。
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
?
 
果然就是这个包数据都是对应的,然后打开看看里面是否有音乐源文件地址:
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
?
 
并没有,但是有一个rid出现了两次 。
 
分析(x4) 
那么它是否是咱们音乐的ID(索引)值?
 
接着看下面的包:
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
?
 
这个get请求很关键,它的参数中利用到了咱们的rid这个值
 
而他返回值里正好有咱们的音乐源文件地址:
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
?
 
通过分析获取到音乐 
通过咱们的分析,已经可以理清思路了 。
 
首先抓取这个包获取到rid
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
?
 
然后传递rid进行这个包的请求获取到音乐文件地址
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 

某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 

某些音乐只能听一分钟?Python绕过反爬,完美下载音乐

文章插图
 
JavaScript绕过之参数冗余 
某些音乐只能听一分钟?Python绕过反爬,完美下载音乐


推荐阅读