分享我用NodeJS实现网略爬虫抓取网易云音乐评论的过程

午饭过后准备看看书,写写诗(这么说是不是显得太装逼。。。)

打开网易云音乐(这不是做广告,网易没有给我钱),被推荐了一首《Nothing's Gonna Change My Love For You》,对,你没看错,就是这首很经典的歌。作为曾经向小伙伴们安利过网易云的我怎么能不看歌曲评论(又在装逼)。

很感人有没有

被感动的稀里哗啦,欲语泪流 。。。想起了自己的那段故事,此情此景再也抑制不住内心的那股洪流,于是静静的敲起那些深藏在脑海深处的记忆(贱人就是矫情)

是经过篮球场,这逼装的华丽丽的失败了

不知道你有没有发现,我还是很有才华的(其实是憋了好久才写出来的)。

就这样,拖着腮,静静地发呆(别问我静静是谁),,,沉寂在这首音乐里,永远都不想醒来。。。


额 额 额。。。好像扯远了,背景铺垫完毕,开始进入主题。

网易云音乐每首歌都会有唯一的ID号,在网页端的网易云音乐里搜索一首歌可以看到浏览器地址栏是这样的

浏览器地址栏看到的id

这首歌id号27955655 对应的是薛之谦的 《我想起你了》 。页面往下拉可以看到评论,分为精彩评论和最新评论两部分。

我们想抓取用户评论的信息除了要知道歌曲ID号还要知道评论信息的api地址。这时候就要看浏览器后台了,我用的是Chrome浏览器,F12进入后台(其他浏览器进入后台的方式你自己找)。点击Network并重新刷新浏览器。这时会看到一堆网络请求,经过分析,可以发现下面这个就是请求用户评论的url

url地址

我们点击它就会看到浏览器解析出的具体数据,如下图

浏览器解析后的数据

看到那个hotComments和comments了吗? 哈哈,这正是我们所需要的数据。

现在我们把上面的url地址直接复制出来放入浏览器的地址导航栏中然后回车。理论上这时候用户的评论信息应该会显示出来,但是却是什么都没有,心都凉了。

不要气馁,继续分析。

我们发现上面那个url请求的请求头是这样的。

评论信息请求头

它采用的是post的方式,而且里面还有一堆数据,而我们直接把这个url放到地址栏中请求是get方式,且不说方式不对,就是请求头里面一堆数据你没有,人家网易的服务器也不认识你呀。于是我们只能通过代码的方式去验证了。

我们把正确的请求头拷贝出来放到我们自己定义的对象中。然后程序发请求时把这个对象传进去不就行了吗? 

我们定义的自己的请求头

然后我们把http模块导入进来之后就可以写请求函数然后发请求了,但是,但是, 但是。重要的事情说三遍,数据并没有回来,就这样纠结了好久,后来发现网易把数据加密了,这样我们就需要解密。这时发现正确的请求头下面有两个参数

请求头下面的两个可疑参数

对,你没有看错,就是这个坑,他就是秘钥。

有了秘钥我们就可以用它来解密了,我们把它拷贝到我们自己定义的对象中并格式化成url参数形式,然后传入请求函数就好了

我们定义的自己的秘钥参数

下面开始写请求函数了,我们这里传入三个参数,第一个是歌曲的ID(songID),第二个是我们上面定义的请求头(option),第三个是我们上面定义的秘钥(postData)。

核心函数,数据请求函数

其中的printInfo是向控制台输出相关信息。writeFile是将数据写入我们本地的文件中。

然后我们执行这个函数 ,就可以在控制台看到数据了,程序执行结束后会看到生成了一个data.json文件,这里面存储的就是我们请求回来的数据。

但是只抓取一首歌曲怎么够,最后我们再写一个循环,用来获取其他歌曲的评论信息。

主入口函数

这里我们从ID号为2080326开始,循环请求了100个ID号,也就是说我们想抓取100首歌的评论信息。但是结果是这样的。

控制台输出的信息

可以看到,只抓到了21首歌曲的信息,我们明明循环了100次啊,这是怎么回事?经过分析,原因有2种。

    1.我们在上面的代码中写道if(resData.total == 0) return;这样的话那些没有评论的歌曲就被我们忽略了。

    2.歌曲的ID号并不是连续的,也就是说这100个ID里有很多是空的,并没对应到任何歌曲。我们随便找一个该区间内没有打印出来的ID号试一下(我试的是http://music.163.com/#/song?id=2080412),结果真的没有相应歌曲。但是歌曲到底是怎么分配ID号的,我是真不知道,估计只有网易云的人才知道吧。

我们再看看生成的data.json文件里的内容对不对,打开之后先格式化然后直接拉到最后,如下图:

生成的data,json文件中的数据/

可以看到也是21首,并且ID号也是相同的。

至此大功告成。

注意: 

1. 网易云音乐的歌曲ID并不是连续的,具体ID号是怎么的排列我也不知道。大家不要太贪心,玩玩就好,不要使劲得抓人家的数据,否则网易把你的号给封了就尴尬了。

2. 我用的node环境是6.10.0版,建议用最新的稳定版本。也可以和我保持同步。win平台上安装:官方下载后直接傻瓜式“下一步”就好了。如果你装了nvm的话可以在线安装不同版本,nvm可以很方便在各个版本中切换,具体怎么安装、使用nvm可以在网上找资料,也可以找我探讨。

3. 代码中用到了部分ES6的语法,只是用到了几个基础的node 自带包。其他的我也不会。

4. 代码托管到github。https://github.com/havenxie/webcrawler-neteast-music  请不要用来干坏事。

5. 使用方式见github

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,777评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,065评论 4 62
  • 成功的路上没有人会叫你起床,也没有人为你买单,你需要自我管理,自我约束,自我突破,人都是被逼出来的,人的潜能无限,...
    wanghaokang阅读 219评论 0 0
  • 我认识一个姑娘,一个善良的傻姑娘。 我在大学里面认识她,准确来说,是在大学校园的路上认识她。 她一手提着刚取的快递...
    樊小聪明阅读 287评论 0 2