Python爬取网易云音乐热门评论

專 欄

王雨城,Python中文社区专栏作者

博客:

http://www.jianshu.com/u/88ff70818bd1

分析api

我们首先用浏览器打开网易云音乐的网页版,随便进入一个歌单,点击进入一首歌曲的页面,可以看到下面有评论。接着F12进入开发者控制台(审查元素)。

分析api

我们在搜索框里输入comments即可找到对应的获取评论的api的url,点击它在右边选择Response就可以看到返回的json了。

那我们的思路就很清晰了,只需要分析这个api并模拟发送请求,获取json进行解析就好了。右键复制这个url下来:

从浏览器的上的地址可以发现以上url里R_SO_4_后的数字就是歌曲的id,如下图:

经测试,后面的csrf_tocken也可以用于其他歌曲。在开发者控制台里,点击headers就可以看到请求方式为post,请求头里的表单数据有两个加过密的参数(params和encSecKey)。但是不要紧,同样经测试,这两个参数也可以用于其他歌曲,直接copy就好。但只限于第一页,其他页码就不一样了,不过对于我们爬取热门评论,第一页就够了。

发送请求获取json

根据上个小节的分析,我们可以写出以下代码获取到json:

运行查看输出就可以知道是否成功获取了json。这里requests的用法,可以参考requests快速上手。

解析json进行输出

我们可以从浏览器的开发者控制台里把json复制到一个 在线json校验格式化工具,这样可以比较清晰地看到json的结构,利于我们解析。如图:

json格式

这个json里有丰富的信息,包括评论总数、用户名、热评、点赞数等。清楚了json 的结构,很容易就可以解析得到想要的信息了。json解析需要引入json包,了解json解析可以参考 使用python解析json详解。里面把json类型和python类型之间的对应关系讲得很清楚了,只需要会用dict和list。解析代码如下:

输出结果:

输出结果

爬取一个歌单所有歌的热门评论

以上已经展示了怎么爬取一首歌的热门评论,接下来我们就可以进一步把一个歌单里所有歌的热门评论都爬取出来。

思路就是,将这个歌单所有歌曲的id爬取出来,替换到之前的url中,然后进行同样的输出。

同样的方法,我们发送歌单的url访问请求,读取response的返回内容看看情况。

输出:

控制台输出

可以看到第一行的标签textarea里有一个json,我们可以用xpath定位到这个标签,获取到这个json并进行解析。在此之前,可以向之前一样先复制到在线校验工具看看结构。

json结构

确实有我们需要的数据,接下来就可以进行解析了。我们这里写成面向对象的风格,完整代码如下:

输出结果展示:

输出结果示例

这里遇到一个神坑,由于param太长,我用了几个"\"符号在末尾进行换行,如上代码那样换了两行没有问题,可是只要我在encSecKey参数这一行进行换行,就会产生bug,死活获取不到json文本。经过多次测试,确实就是"\"符号导致param没能正确地传入post导致获取不到json文本。目前不清楚什么原因,所以,这个换行还是慎用。

本文为作者原创作品,未经作者授权同意禁止转载

原文发布于微信公众号 - Python中文社区(python-china)

原文发表时间:2017-07-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏狮乐园

在 redux 中集成 angular di 机制

最近一直在折腾redux相关的东西,算然说官方鼓励的使用方式是将redux和react一起使用,但并不影响我们在其他的mvvm框架中使用它。

1183
来自专栏QQ音乐前端团队专栏

自己动手打造前端性能监控系统

我们从三个各方面,前端上报,数据收集和入库,数据展示来介绍了如何打造一个测速系统。

99310
来自专栏玉树芝兰

如何用 pipenv 克隆 Python 教程代码运行环境?(含视频讲解)

咱们的 Python 教程代码已经可以免安装在线运行了。但如果你希望在本地克隆运行环境,请参考本文的步骤说明。

1203
来自专栏星流全栈

dva - React + Redux, but like elm

1394
来自专栏阮一峰的网络日志

全文Feed的终极解决方案

但是,世界上的大部分Feed,都是摘要Feed,甚至是标题Feed。我们只好自己动手,制作全文Feed。

1712
来自专栏FreeBuf

Any.Run交互式恶意软件分析沙盒服务现向公众免费开放

近日,名为Any.Run的交互式恶意软件分析沙盒服务宣布,其免费社区版本正式向公众开放。这样一来任何人只需简单的注册一个账号,就可以使用该平台实时的对某个特定文...

3876
来自专栏铭毅天下

Elasticsearch大文件检索性能提升20倍实践(干货)

少废话,直接开始。 1、大文件是多大? ES建立索引完成全文检索的前提是将待检索的信息导入Elaticsearch。 项目中,有时候需要将一些扫描件、PDF文档...

3896
来自专栏jojo的技术小屋

原 微信授权和朋友圈分享

作者:汪娇娇 日期:2016.9.25 现在想想,微信这东西真是让人又爱又恨,刚接触的时候,简直毫无头绪,不过在后台的配合下,现在终于能八九不离十的将微信获取用...

6305
来自专栏社区的朋友们

深入浅出 Nodejs ( 一 ) :Nodejs 的简介

我认为 Node 是一门独具风格的技术,它的特点很有意思,本章我们主要讲 Node 的特点,Node 应用场景以及 Node 的使用者。

6301
来自专栏Golang语言社区

Golang适合高并发场景的原因分析

典型的两个现实案例: 我们先看两个用Go做消息推送的案例实际处理能力。 360消息推送的数据: 16台机器,标配:24个硬件线程,64GB内存 Linux K...

5257

扫码关注云+社区

领取腾讯云代金券