python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌

孤竹翊算是我最喜欢的唱歌的人了。喜欢了大概有5年,快6年了吧从初中听见《蜀相》以来就一直好喜欢她的歌。
建议你,可以一边动手一边听歌。这样最好了。
嗯,说说如何批量下载她的歌吧,过一段时间准备做一个webapp。
于是先来爬取她的歌好了。
首先,说说,看完这个东西会得到什么好了(如果你不会的话)。

1.应对异步加载

2.应对JS代码

3.简单的前端知识

4.使用抓包工具

5.使用异步编程以及子进程

6.处理内存泄露(如果发生)

7.听竹子的歌


python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第1张图片
5sing的播放器

一般来说都是用 标签实现的音频文件播放。而,为了美化,通常不会让这个东西给用户看见。
所以我们来找一找这个

image.png

找到咯,然后呢。
把src属性找出来就好了。
话不多说了,直接看看代码吧。

from requests import get,post
from bs4 import BeautifulSoup
if __name__ == '__main__':
    a=get('http://5sing.kugou.com/echoriath/fc/1.html').text
    print(a)

但是呢,看看response的html。


python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第2张图片
没有找到audio

所以说,整个html中是没有audio存在的。
这个标签是后来才创建出来的哦,还有,src属性也是后来才加上的哦。


第二部分,看看 audio 标签是被什么创建的吧。
这里用到抓包工具fiddler 你也可以用其他的东西,但是我用这个。
这方面的教程有很多,随便找一下就可以了。
我在这里只说说一些坑

1.关于FILLDER的HTTPS

2.记得要清除浏览器缓存(要不然浏览器不会发出请求的,它会保存静态文件),还有就是设置FILLDER,要它禁止缓存。

好了,现在把他们整个5sing的前端代码全部下载下来就好了(别下图片,太多了)。

python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第3张图片
下载好的一部分

大概有50多个吧。
如果你没有装 vsode,那么应该装上它(它很美,很好看,也很方便),还有要装 node.js
然后,你要用npm下载一个 js-beautify
否则你看到的js代码都是一团乱的,而不是接下来整理的效果。
使用 vsode的全局搜索功能(ctrl+shift+f)找到 audio

python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第4张图片
我的搜索结果

看,结果出来了。

这一行代码就是使得audio出现的东西了(得会会被jquery插入html)


python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第5张图片
关注这里

唯一需要关注的东西是,"src="=source 这句,如果可以找到source就是找到了下载地址了。

一路往上看,啊,发现,它们是在一个函数了里面。


python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第6张图片
image.png

看看谁调用了这个函数吧。


python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第7张图片
留心source参数

发现了,上一段语句是在另一个函数里面的。


python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第8张图片
留心source参数

那么是谁又在调用它呢。
对了,记得看好一点,它们的参数,我们找到最上一层,就可以找到source 这个变量的来源了。


python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第9张图片
留心file参数

好了,接下来添加两个语句


python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第10张图片
image.png

输出file到底是什么,还有就是查看调用栈。嗯,要用,fiddler才行。自己看如何做到自己看教程吧。


python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第11张图片
image.png

这时候,另外一个JS文件出现了。就是 listen.min.newm.js
好了。记得要用js-beautify啊。
看到1946行吧


python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第12张图片
image.png

调用了之前(并不是,我跳过了两个函数,照着之前方法向上找就好了。)说的函数。看传进去的参数。
只要得到了songObj 可以说事情就了了。


python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第13张图片
关注curSongObj

下面就解决了。


python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第14张图片
出现了

按照之前的方法,全局搜索,找到了。globals.js文件。
但是里面没有 globals.ticket 这个东西,它在

python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌_第15张图片

html 文件里面。
所以很无聊的加密了一下。我们把加密过程复制下来就好了。
如果是没有前端经验的人看了,以后会觉得奇怪,为什么JS文件有那么多个,可以互相引用呢。其实浏览器都支持了 AMD 和 CommonJS 这两个东西,使得他们可以相互引用,其中,AMD(也就是5SING代码中的)是异步的(现在html

你可能感兴趣的:(python 爬虫 异步 子进程 ajax 音乐 爬取孤竹翊的歌)