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

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤
QQ群:623406465


我们的目标是爬取网易云中的热歌排行榜中所有歌曲的热门评论。
这样既可以减少我们需要爬取的工作量,又可以保存到高质量的评论。

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

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

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

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

接下来打开web控制台(chrome的话打开开发者工具,如果是其他浏览器应该也是类似),chrome下按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>

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

#!/usr/bin/env python3
# -*- coding: utf-8 -*-import re
import urllib.request
import urllib.error
import urllib.parse
import jsondef get_all_hotSong():     #获取热歌榜所有歌曲名称和idurl='http://music.163.com/discover/toplist?id=3778678'    #网易云云音乐热歌榜urlheader={    #请求头部'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}request=urllib.request.Request(url=url, headers=header)html=urllib.request.urlopen(request).read().decode('utf8')   #打开urlhtml=str(html)     #转换成strpat1=r'<ul class="f-hide"><li><a href="/song\?id=\d*?">.*</a></li></ul>'  #进行第一次筛选的正则表达式result=re.compile(pat1).findall(html)     #用正则表达式进行筛选result=result[0]     #获取tuple的第一个元素pat2=r'<li><a href="/song\?id=\d*?">(.*?)</a></li>' #进行歌名筛选的正则表达式pat3=r'<li><a href="/song\?id=(\d*?)">.*?</a></li>'  #进行歌ID筛选的正则表达式hot_song_name=re.compile(pat2).findall(result)    #获取所有热门歌曲名称hot_song_id=re.compile(pat3).findall(result)    #获取所有热门歌曲对应的Idreturn hot_song_name,hot_song_iddef get_hotComments(hot_song_name,hot_song_id):url='http://music.163.com/weapi/v1/resource/comments/R_SO_4_' + hot_song_id + '?csrf_token='   #歌评urlheader={    #请求头部'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}#post请求表单数据data={'params':'zC7fzWBKxxsm6TZ3PiRjd056g9iGHtbtc8vjTpBXshKIboaPnUyAXKze+KNi9QiEz/IieyRnZfNztp7yvTFyBXOlVQP/JdYNZw2+GRQDg7grOR2ZjroqoOU2z0TNhy+qDHKSV8ZXOnxUF93w3DA51ADDQHB0IngL+v6N8KthdVZeZBe0d3EsUFS8ZJltNRUJ','encSecKey':'4801507e42c326dfc6b50539395a4fe417594f7cf122cf3d061d1447372ba3aa804541a8ae3b3811c081eb0f2b71827850af59af411a10a1795f7a16a5189d163bc9f67b3d1907f5e6fac652f7ef66e5a1f12d6949be851fcf4f39a0c2379580a040dc53b306d5c807bf313cc0e8f39bf7d35de691c497cda1d436b808549acc'}postdata=urllib.parse.urlencode(data).encode('utf8')  #进行编码request=urllib.request.Request(url,headers=header,data=postdata)reponse=urllib.request.urlopen(request).read().decode('utf8')json_dict=json.loads(reponse)   #获取jsonhot_commit=json_dict['hotComments']  #获取json中的热门评论num=0fhandle=open('./song_comments','a')  #写入文件fhandle.write(hot_song_name+':'+'\n')for item in hot_commit:num+=1fhandle.write(str(num)+'.'+item['content']+'\n')fhandle.write('\n==============================================\n\n')fhandle.close()hot_song_name,hot_song_id=get_all_hotSong()  #获取热歌榜所有歌曲名称和idnum=0
while num < len(hot_song_name):    #保存所有热歌榜中的热评print('正在抓取第%d首歌曲热评...'%(num+1))get_hotComments(hot_song_name[num],hot_song_id[num])print('第%d首歌曲热评抓取成功'%(num+1))num+=1

代码运行结果如下:

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

信息无误~

Python爬虫采集网易云音乐热评实战相关推荐

  1. python爬取网易云音乐热评

    由于网易云音乐热评特别不错,所以前段时间无聊就看了一下怎么爬他们的热评 ,附上代码 这是直接爬出来的所有信息,需要在进行数据清洗下 不懂的可以私信我 import requestscookies = ...

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

    前一段时间刚刚入门python爬虫,有大概半个月时间没有写python了,都快遗忘了.于是准备写个简单的爬虫练练手,我觉得网易云音乐最优特色的就是其精准的歌曲推荐和独具特色的用户评论,于是写了这个抓取 ...

  3. python爬取网易云音乐热评,爬取网易云音乐热评[附上音乐下载]

    [Python] 纯文本查看 复制代码import requests import time,os from bs4 import BeautifulSoup class Music_down: de ...

  4. python爬取网易云音乐热评_python爬取网易云音乐评论

    本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...

  5. python作业记录--爬虫,网易云音乐热评+词云生成

    import requests import json import re import random from Crypto.Cipher import AES from base64 import ...

  6. 网易云音乐热评详细源码-Python

    爬虫 & 数据分析 运行环境:python3.6 为方便理解,网易云音乐热评的爬取代码分为两部分 1. 先爬取每个歌单里的歌曲的url,导出到music1_01.csv文件中 2. 爬取每首歌 ...

  7. python网易云听歌时长_用Python爬取10w条网易云音乐热评并进行分析的方法总结

    有个段子讲"十年文案老司机,不如网易评论区,网易文豪遍地走,评论全部单身狗",网易云音乐的评论区也一直都是各类文案大神的聚集地. 那么我们普通用户到底如何成为网易云音乐评论里的热评 ...

  8. python音乐的数据抓取与分析_python抓取网易云音乐热评做词图数据分析

    最近就有一部"怀旧"题材的电影,未播先火,那就是刘若英的处女作--<后来的我们>.青春,爱情,梦想,一直是"怀旧"题材的核心要素,虽然电影现在还未上 ...

  9. Python爬取网易云音乐热歌榜(爬虫)

    Python爬取网易云音乐热歌榜歌曲,并下载到本地 找到要下载歌曲排行榜的链接,这里用的是: https://music.163.com/discover/toplist?id=3778678 然后更 ...

  10. python爬取网易云音乐飙升榜音乐_python爬取网易云音乐热歌榜 python爬取网易云音乐热歌榜实例代码...

    想了解python爬取网易云音乐热歌榜实例代码的相关内容吗,FXL在本文为您仔细讲解python爬取网易云音乐热歌榜的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:python,网易热歌榜 ...

最新文章

  1. 百度计算广告学沙龙学习笔记 - 内容匹配广告
  2. Golang之空结构体和零长数组的实践
  3. thinkphp5 获取当前的域名
  4. Eclipse使用时的一些小积累
  5. [转帖]好技术领导,差技术领导
  6. python和c#哪个简单-最近学习 Python 的一些感触 (对比 C#)
  7. 面试时会谈薪的人一开口就赢了:让你薪资翻倍的谈薪技巧
  8. C# TabControl中Tab放於左邊並正常顯示TabText(
  9. 配置环境_python虚拟环境的搭建
  10. signature pad java_2020-07-08 JSsignature_pad 无纸化电子签名
  11. C#图解教程 第七章 类和继承
  12. Ubuntu 安装 typora
  13. BI系统的应用组织思路与数据分析模式
  14. 快到而立之年了,可是能撑得起而立吗?
  15. 性能可靠塔式服务器,塔式服务器备受企业关注的原因有哪些
  16. Tomcat的下载安装及静态部署
  17. 小学计算机余数在线,余数计算器-余数计算器
  18. 这竟然是全世界最好的模式(商业大佬为之咂舌)
  19. 青岛大学苏晓泉组-微生物组16S扩增子功能校正算法Meta-Apo
  20. win10网络计算机显示不全,win10系统局域网显示计算机设备不完全的解决方法

热门文章

  1. HaaS EDU场景式应用学习 - 光照信息屏
  2. EL表达式和JSTL的介绍以及基本使用
  3. Honeywell1900霍尼韦尔 扫描二维码 QT 客户端显示数据
  4. VPP classify ACL
  5. 电脑连接的手机真机,利用Chrome调试WebView
  6. C语言指针类型和类型转换
  7. aliyun阿里云视频直播播放器代码
  8. 《SAP后勤模块实施攻略—SAP在生产、采购、销售、物流中的应用》——3.3 MRP结果评估概览...
  9. java 汉字区位码表_汉字编码解析
  10. Win10 如何配置JDK环境变量