Python爬虫采集网易云音乐热评实战

前一段时间刚刚入门python爬虫 , 有大概半个月时间没有写python了 , 都快遗忘了 。 于是准备写个简单的爬虫练练手 , 我觉得网易云音乐最优特色的就是其精准的歌曲推荐和独具特色的用户评论 , 于是写了这个抓取网易云音乐热歌榜里的热评的爬虫 。 我也是刚刚入门爬虫 , 有什么意见和问题欢迎提出 , 大家一起共同进步 。
私信小编01即可获取大量Python学习资料废话就不多说了~
我们的目标是爬取网易云中的热歌排行榜中所有歌曲的热门评论 。 这样既可以减少我们需要爬取的工作量 , 又可以保存到高质量的评论 。
首先 , 我们打开网易云网页版 , 如图:
Python爬虫采集网易云音乐热评实战文章插图
点击排行榜 , 然后点击左侧云音乐热歌榜 , 如图:
Python爬虫采集网易云音乐热评实战文章插图
?
我们先随便打开一个歌曲 , 找到如何抓取指定的歌曲的热门歌评的方法 , 如图 , 我选了一个最近我比较喜欢的歌曲为例:
Python爬虫采集网易云音乐热评实战文章插图
?
进去后我们会看到歌评就在这个页面的下面 , 接下来我们就要想办法获取这些评论 。
接下来打开web控制台(chrome的话打开开发者工具 , 如果是其他浏览器应该也是类似) , chrome下按F12 , 如图:
Python爬虫采集网易云音乐热评实战文章插图
?
选则Network , 然后我们按F5刷新一下 , 刷新之后得到的数据如下图所示:
Python爬虫采集网易云音乐热评实战文章插图
?
可以看到浏览器发送了非常多的信息 , 那么哪一个才是我们想要的呢?这里我们可以通过状态码做一个初步的判断 , status code(状态码)标志了服务器请求的状态 , 这里状态码为200即表示请求正常 , 而304则表示不正常(状态码种类非常多 , 如果要想详细了解可以自行搜索 , 这里不说304具体的含义了) 。 所以我们一般只用看状态码为200的请求就可以了 , 还有就是 , 我们可以通过右边栏的预览来粗略观察服务器返回了什么信息(或者查看响应) 。 通过这两种方法结合一般我们就可以快速找到我们想要分析的请求 。 通过反复的查找 , 终于找到了含有歌评的请求 , 如图:
Python爬虫采集网易云音乐热评实战文章插图
?
可能截图在CSDN上不是很清楚 , 我们在一个Name为R_SO_4_489998494?csrf_token=的POST请求中找到了包含这首歌的歌评 。 我们把这个分块截图发出来 , 这样可以看的清楚一些:
请求基本信息:
Python爬虫采集网易云音乐热评实战文章插图
?
请求头部:
Python爬虫采集网易云音乐热评实战文章插图
?请求中的表单数据:
Python爬虫采集网易云音乐热评实战文章插图
?
我们可以看到 , 包含这首歌歌评的请求url为, 我们换了几首歌后发现 , 这个请求的前部分都是一样的 , 只是R_SO_4_后面紧跟的一串数字不一样 。 我们可以推测出 , 每一首歌都有一个指定的id , R_SO_4_后面紧跟的就是这首歌的id 。
我们再看一下提交的表单数据 , 我们会发现表单中需要填两个数据 , 名称为params和encSecKey 。 后面紧跟的是一大串字符 , 换几首歌会发现 , 每首歌的params和encSecKey都是不一样的 , 因此 , 这两个数据可能经过一个特定的算法进行加密过的 。