相关文章推荐
正直的火车  ·  CorsConfigurationSourc ...·  5 月前    · 
宽容的水煮肉  ·  龙游:打造全竹绿色循环产业链 ...·  1 年前    · 
犯傻的饺子  ·  android应用程序中获取view的位置 ...·  1 年前    · 
力能扛鼎的红酒  ·  yaml(yml)文件数据格式(List、M ...·  1 年前    · 
刚毅的灭火器  ·  java:StringEscapeUtils ...·  1 年前    · 
Code  ›  Python3爬虫抓取网易云音乐热评实战开发者社区
音乐 python3 网易 网易评论
https://cloud.tencent.com/developer/article/1114791
近视的充电器
2 年前
小小科
0 篇文章

Python3爬虫抓取网易云音乐热评实战

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
小小科
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > 北京马哥教育 > Python3爬虫抓取网易云音乐热评实战

Python3爬虫抓取网易云音乐热评实战

作者头像
小小科
发布 于 2018-05-02 18:13:27
1.5K 0
发布 于 2018-05-02 18:13:27
举报

前一段时间刚刚入门python爬虫,有大概半个月时间没有写python了,都快遗忘了。于是准备写个简单的爬虫练练手,我觉得网易云音乐最优特色的就是其精准的歌曲推荐和独具特色的用户评论,于是写了这个抓取网易云音乐热歌榜里的热评的爬虫。我也是刚刚入门爬虫,有什么意见和问题欢迎提出,大家一起共同进步。

废话就不多说了~

我们的目标是爬取网易云中的热歌排行榜中所有歌曲的热门评论。

这样既可以减少我们需要爬取的工作量,又可以保存到高质量的评论。

首先,我们打开网易云网页版,如图:

点击排行榜,然后点击左侧云音乐热歌榜,如图:

我们先随便打开一个歌曲,找到如何抓取指定的歌曲的热门歌评的方法,如图,我选了一个最近我比较喜欢的歌曲为例:

进去后我们会看到歌评就在这个页面的下面,接下来我们就要想办法获取这些评论。

接下来打开web控制台(chrom的话打开开发者工具,如果是其他浏览器应该也是类似),chrom下按F12,如图:

选则Network,然后我们按F5刷新一下,刷新之后得到的数据如下图所示:

可以看到浏览器发送了非常多的信息,那么哪一个才是我们想要的呢?这里我们可以通过状态码做一个初步的判断,status code(状态码)标志了服务器请求的状态,这里状态码为200即表示请求正常,而304则表示不正常(状态码种类非常多,如果要想详细了解可以自行搜索,这里不说304具体的含义了)。所以我们一般只用看状态码为200的请求就可以了,还有就是,我们可以通过右边栏的预览来粗略观察服务器返回了什么信息(或者查看响应)。通过这两种方法结合一般我们就可以快速找到我们想要分析的请求。通过反复的查找,终于找到了含有歌评的请求,如图:

可能截图在CSDN上不是很清楚,我们在一个Name为 R_SO_4_489998494?csrf_token= 的POST请求中找到了包含这首歌的歌评。我们把这个分块截图发出来,这样可以看的清楚一些:

请求基本信息:

请求头部:

请求中的表单数据:

我们可以看到,包含这首歌歌评的请求url为 http://music.163.com/weapi/v1/resource/comments/R_SO_4_489998494?csrf_token= ,我们换了几首歌后发现,这个请求的前部分都是一样的,只是 R_SO_4_ 后面紧跟的一串数字不一样。我们可以推测出,每一首歌都有一个指定的id,R_SO_4_后面紧跟的就是这首歌的id。

我们再看一下提交的表单数据,我们会发现表单中需要填两个数据,名称为params和encSecKey。后面紧跟的是一大串字符,换几首歌会发现,每首歌的params和encSecKey都是不一样的,因此,这两个数据可能经过一个特定的算法进行加密过的。

服务器返回的和评论相关的数据为json格式的,里面含有非常丰富的信息(比如有关评论者的信息,评论日期,点赞数,评论内容等等),其中hotComments就是我们要找的热门评论,总共15条,如图所示:

至此,我们已经确定了方向了,即只需要确定params和encSecKey这两个参数值即可。但是这两个参数是经过特定的算法进行加密的,怎么办呢?我发现了一个规律, http://music.163.com/weapi/v1/resource/comments/R_SO_4_489998494?csrf_token= 中 R_SO_4_后面的数字就是这首歌的id值,而对于不同的歌曲的param和encSecKey值,如果把一首歌比如A的这两个参数值传给B这首歌,那么对于相同的页数,这种参数是通用的,即A的第一页的两个参数值传给其他任何一首歌的两个参数,都可以获得相应歌曲的第一页的评论,对于第二页,第三页等也是类似。

而我们其实只需要获取第一页的15条热门评论,所以我们只需要随便找一首歌,将这首歌第一页中的该请求中的params和encSecKey这两个参数值复制下来,就可以使用了。

关于这两个参数如何解密,强大的知乎上其实已经有答案的了,感兴趣的朋友可以进去看一下(https://www.zhihu.com/question/36081767),我们在这里就只需要用我们这种偷懒的办法就可以完成需求了,xixi。

到此为止,我们如何抓取网易云音乐的热门评论已经分析完了,我们再分析一下如何获取云音乐热歌榜中所有歌曲的信息。

我们需要获取云音乐热歌榜中的所有歌曲的歌曲名和对应的id值。

跟上面的分析步骤类似,我们先进入热歌榜的网址,如图:

按F12,进入WEB工作台,如图:

我们在一个名为 toplist?id=3778678 的GET请求中,找到了该榜单的所有歌曲信息。

请求对应的信息如图:

我们预览一下该请求返回的结果,如图:

我们在代码的第524行我们找到了包含歌曲信息的代码,如图:

因此,我们只需要将该请求的代码中,将包含信息的代码筛选出来。

我们在这里使用正则表达式进行数据筛选。

通过观察特点,我们可以通过两次正则表达式的筛选,将我们需要的歌曲信息提取出来。

第一次正则表达式我们将该请求返回的所有代码中,提取出第525行代码。

第一次正则表达式如下: <ul class="f-hide"><li><a href="/song?id=d*?">.*</a></li></ul>

第二次正则表达式我们将该第524行中我们需要的歌曲信息提取出来,我们需要歌曲的歌名和id,对应的正则表达式如下:

获取歌名: <li><a href="/song?id=d*?">(.*?)</a></li>

获取歌曲的id: <li><a href="/song?id=(d*?)">.*?</a></li>

到此,我们整个过程已经分析完了,上代码看具体细节~~

代码如下:

代码运行结果如下:

对比一下网页上《如果我爱你》这首歌的歌评和我们保存下的歌评:

信息无误~

作者:阿阿阿阿阿阿鑫 来源:http://blog.csdn.net/fengxinlinux/article/details/77950209


本文参与 腾讯云自媒体分享计划 ,分享自微信公众号。
原始发表:2017-09-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除
python
爬虫

本文分享自 马哥Linux运维 微信公众号, 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

python
爬虫
评论
登录 后参与评论
0 条评论
热度
最新
登录 后参与评论
关于作者
小小科
0
文章
0
累计阅读量
0
获赞
前往专栏
领券
  • 社区

    • 专栏文章
    • 阅读清单
    • 互动问答
    • 技术沙龙
    • 技术视频
    • 团队主页
    • 腾讯云TI平台
  • 活动

    • 自媒体分享计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2023 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
正直的火车  ·  CorsConfigurationSource (Spring Framework 7.0.5 API)
5 月前
宽容的水煮肉  ·  龙游:打造全竹绿色循环产业链 探索山区共同富裕新路子
1 年前
犯傻的饺子  ·  android应用程序中获取view的位置 - 一点点征服 - 博客园
1 年前
力能扛鼎的红酒  ·  yaml(yml)文件数据格式(List、Map、Object、基本数据类型) - 风去影无踪 - 博客园
1 年前
刚毅的灭火器  ·  java:StringEscapeUtils.unescapeJava去掉转义字符-CSDN博客
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号