不知不觉中喜欢周杰伦已经那么多年了,刚好最近也在学习python爬虫的东西,顺便记录下爬取JAY的热门歌曲和热门评论的过程。

0_1. 首先是今天所用到的东西

py2.7.13(IDE使用的是Pycharm) + requests +urllib2 + re

0_2.确定我们的目标网页,我们从这个杰伦歌曲合集页面(http://music.163.com/#/artist?id=6452)开始。

OK,正式开始今天的工作

1.打开F12 开发者工具,Network确定为我们登陆这个网页是一个GET请求,目前状态码是200,证明登陆成功。

2. 获取 歌名 + 歌曲id

接下来,就需要我们利用程序来模拟这个登陆操作了。这里我用到的是一个经典操作

response = urllib2.urlopen(url)
html = response.read()

利用  urllib2.urlopen(url)  向指定URL发送一个请求,然后将得到的响应读取处理。print 一下结果,可以看到在<ul class="f-hide"> 后面有着我们需要的各种歌名。所以,我们现在的工作是从这个html中找到这个部分的内容,并取出来。

这里就要用到强大的 正则表达式 的内容了。当然,你也可以选择其他讨巧的方法。因为最开始接触的是正则(无良老师),所以这里用正则匹配来获取这部分内容。

所有的歌曲位于 <ul class="f-hide"> 后面,而每首歌位于 <a href="/song?id=531051217">等你下课 (with 杨瑞代)</a></li><li> 里面,包括 歌曲id(531051217)、歌曲名称(等你下课(with 杨瑞代)) 也就是说用正则匹配到这之间的内容即可。

reg_list = '<ul class="f-hide"><li>(.*?)</a></li></ul>'
reg_list = re.compile(reg_list, re.S)
content = re.findall(reg_list, html)

content里即包含了需要的 歌曲id 和 歌曲名称 内容,输出看一下。啊哈?怎么全都是奇奇怪怪的内容!!!(掀桌)

['<a href="/song?id=531051217">\xe7\xad\x89\xe4\xbd\xa0\xe4\xb8\x8b\xe8\xaf\xbe (with \xe6\x9d\xa8\xe7\x91\x9e\xe4\xbb\xa3)</a></li><li><a href="/song?id=418603077">\xe5\x91\x8a\xe7\x99\xbd\xe6\xb0\x94\xe7\x90\x83</a></li><li><a href="/song?id=186016">\xe6\x99\xb4\xe5\xa4\xa9</a></li><li><a href="/song?id=186001">\xe4\xb8\x83\xe9\x87\x8c\xe9\xa6\x99</a></li><li><a href="/song?id=185709">\xe7\xa8\xbb\xe9\xa6\x99</a></li><li><a href="/song?id=185820">\xe7\x94\x9c\xe7\x94\x9c\xe7\x9a\x84</a></li><li><a href="/song?id=185809">\xe5\xbd\xa9\xe8\x99\xb9</a></li><li><a href="/song?id=186119">\xe7\xae\x80\xe5\x8d\x95\xe7\x88\xb1</a></li><li><a href="/song?id=186125">\xe5\xbc\x80\xe4\xb8\x8d\xe4\xba\x86\xe5\x8f\xa3</a></li><li><a href="/song?id=29818120">\xe7\xae\x97\xe4\xbb\x80\xe4\xb9\x88\xe7\x94\xb7\xe4\xba\xba</a></li><li><a href="/song?id=186005">\xe6\x90\x81\xe6\xb5\x85</a></li><li><a href="/song?id=186139">\xe5\xae\x89\xe9\x9d\x99</a></li><li><a href="/song?id=185811">\xe9\x9d\x92\xe8\x8a\xb1\xe7\x93\xb7</a></li><li><a href="/song?id=185924">\xe4\xb8\x80\xe8\xb7\xaf\xe5\x90\x91\xe5\x8c\x97</a></li><li><a href="/song?id=185868">\xe4\xb8\x8d\xe8\x83\xbd\xe8\xaf\xb4\xe7\x9a\x84\xe7\xa7\x98\xe5\xaf\x86</a></li><li><a href="/song?id=185904">\xe5\xa4\x9c\xe6\x9b\xb2</a></li><li><a href="/song?id=185821">\xe6\x9c\x80\xe9\x95\xbf\xe7\x9a\x84\xe7\x94\xb5\xe5\xbd\xb1</a></li><li><a href="/song?id=185699">\xe8\xaf\xb4\xe5\xa5\xbd\xe7\x9a\x84\xe5\xb9\xb8\xe7\xa6\x8f\xe5\x91\xa2</a></li><li><a href="/song?id=185912">\xe6\x9e\xab</a></li><li><a href="/song?id=185668">\xe7\x83\x9f\xe8\x8a\xb1\xe6\x98\x93\xe5\x86\xb7</a></li><li><a href="/song?id=186014">\xe4\xbb\xa5\xe7\x88\xb6\xe4\xb9\x8b\xe5\x90\x8d</a></li><li><a href="/song?id=186055">\xe5\x9b\x9e\xe5\x88\xb0\xe8\xbf\x87\xe5\x8e\xbb</a></li><li><a href="/song?id=185884">\xe9\x80\x80\xe5\x90\x8e</a></li><li><a href="/song?id=185815">\xe8\x92\xb2\xe5\x85\xac\xe8\x8b\xb1\xe7\x9a\x84\xe7\xba\xa6\xe5\xae\x9a</a></li><li><a href="/song?id=185694">\xe7\xbb\x99\xe6\x88\x91\xe4\xb8\x80\xe9\xa6\x96\xe6\xad\x8c\xe7\x9a\x84\xe6\x97\xb6\xe9\x97\xb4</a></li><li><a href="/song?id=186046">\xe5\x8d\x8a\xe5\xb2\x9b\xe9\x93\x81\xe7\x9b\x92</a></li><li><a href="/song?id=25641369">\xe6\x98\x8e\xe6\x98\x8e\xe5\xb0\xb1</a></li><li><a href="/song?id=186160">\xe9\xbe\x99\xe5\x8d\xb7\xe9\xa3\x8e</a></li><li><a href="/song?id=186010">\xe8\xbd\xa8\xe8\xbf\xb9</a></li><li><a href="/song?id=185906">\xe5\x8f\x91\xe5\xa6\x82\xe9\x9b\xaa</a></li><li><a href="/song?id=185879">\xe5\x90\xac\xe5\xa6\x88\xe5\xa6\x88\xe7\x9a\x84\xe8\xaf\x9d</a></li><li><a href="/song?id=185920">\xe7\x8f\x8a\xe7\x91\x9a\xe6\xb5\xb7</a></li><li><a href="/song?id=186008">\xe5\x9b\xad\xe6\xb8\xb8\xe4\xbc\x9a</a></li><li><a href="/song?id=185667">\xe8\xaf\xb4\xe4\xba\x86\xe5\x86\x8d\xe8\xa7\x81</a></li><li><a href="/song?id=29822018">\xe6\x89\x8b\xe5\x86\x99\xe7\x9a\x84\xe4\xbb\x8e\xe5\x89\x8d</a></li><li><a href="/song?id=417250561">\xe4\xb8\x8d\xe8\xaf\xa5(with aMEI)</a></li><li><a href="/song?id=186018">\xe4\xb8\x9c\xe9\xa3\x8e\xe7\xa0\xb4</a></li><li><a href="/song?id=186145">\xe5\x8f\xaf\xe7\x88\xb1\xe5\xa5\xb3\xe4\xba\xba</a></li><li><a href="/song?id=186149">\xe6\x98\x9f\xe6\x99\xb4</a></li><li><a href="/song?id=418602087">\xe7\x88\xb1\xe6\x83\x85\xe5\xba\x9f\xe6\x9f\xb4</a></li><li><a href="/song?id=185878">\xe5\xa4\x9c\xe7\x9a\x84\xe7\xac\xac\xe4\xb8\x83\xe7\xab\xa0</a></li><li><a href="/song?id=185818">\xe6\x88\x91\xe4\xb8\x8d\xe9\x85\x8d</a></li><li><a href="/song?id=185908">\xe9\xbb\x91\xe8\x89\xb2\xe6\xaf\x9b\xe8\xa1\xa3</a></li><li><a href="/song?id=186002">\xe5\x80\x9f\xe5\x8f\xa3</a></li><li><a href="/song?id=186114">\xe7\x88\xb1\xe5\x9c\xa8\xe8\xa5\xbf\xe5\x85\x83\xe5\x89\x8d</a></li><li><a href="/song?id=186103">\xe8\x9c\x97\xe7\x89\x9b</a></li><li><a href="/song?id=25641368">\xe7\xba\xa2\xe5\xb0\x98\xe5\xae\xa2\xe6\xa0\x88</a></li><li><a href="/song?id=29822014">\xe5\x90\xac\xe8\xa7\x81\xe4\xb8\x8b\xe9\x9b\xa8\xe7\x9a\x84\xe5\xa3\xb0\xe9\x9f\xb3</a></li><li><a href="/song?id=186045">\xe5\x8d\x8a\xe5\x85\xbd\xe4\xba\xba</a></li><li><a href="/song?id=186109">\xe4\xb8\x96\xe7\x95\x8c\xe6\x9c\xab\xe6\x97\xa5']

不过好像这个 with 和上面 with 杨瑞代应该是匹配的,所以结果肯定没错。那只能是编码问题。那就不影响结果。继续从content里面匹配需要的 id 和 名字。

reg = u'<a href="(.*?)">(.*?)</a></li><li>'
reg = re.compile(reg, re.S)
song_list = re.findall(reg, content[0])

输出song_list的内容看看。哈哈哈哈哈哈,好像第一步很成功嘛。

3. 获取每首歌曲的热门评论和评论数等

随便点进去一首歌,会发现网页变成  http://music.163.com/#/song?id=531051217,和我们原始的网页相比,artist?id变成了song?id 这里就可以理解网易云音乐网页存储的格式了,song_id 代表每首歌的编号, artist?id代表每个歌手的编号,也就是随便更改编号,应该能进入对应的歌曲或歌手的的页面。哇, 我周杰伦才只能 6452, 我要看看1是谁。  呃......好吧,到处都是404。

回归正常操作。

根据前面对网页url的分析,可以知道前面已经获取了的歌曲id ,就是我们这里进入下一个页面的钥匙。哇, 芝麻开门~~~

继续利用开发者工具分析网页评论部分,可以看出我们需要的总评论数的位置,以及单条评论的位置。包括评论用户名称、内容、点赞数。所以现在我们需要get到这部分内容。

而这里,我们看到这个响应对应的消息头里,请求网址和方法,是一个post请求。(chrome突然崩溃了。很忧伤,只能用第二喜欢的 火狐 浏览器了)

对应的参数页参数,这明显应该是一个加密的参数。不知道复制可不可以有用。试试再说。2333333

设置好请求头和参数数据,利用post请求获取相应

header = {'User_Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0','Referer': 'http://music.163.com/song?id=531051217'}
data = {"params": params,"encSecKey": encSecKey}
response = requests.post(song_url, data=data, headers=header)

虽然得到的response是一个200响应,代表我访问成功,但是输出response.text()却得到如下信息:

{"code":-460,"msg":"Cheating"}

呃....我觉得我被套路了,这应该就是传说中的反爬虫机制了吧。。可是我已经写过头了呀。

于是我干脆把请求头里面的所有东西全加进去

header = {'Host': 'music.163.com','User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36','Content-Type': 'application/x-www-form-urlencoded','Accept': '*/*','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.8'}

呃。。。。这个反爬机制...  好吧。我们成功的获取了评论列表。由于这里是json编码的,我们也可以利用json库来解析。

然后我们就可以得到我们想要的一切了。。。。

hot_comments = json_dict['hotComments']
count_comments = json_dict['total']           # 总评论数
for item in hot_comments:comment = item['content']   # 内容likedCount = item['likedCount']  # 点赞总数nickname = item['user']['nickname']  # 昵称

然后你就可以把这些存下来慢慢看咯。。当然,如果你能写入数据库的话也不错来着。

ok。打完手工~! 我要再去玩新的拉。

Python爬网易云音乐的那些事相关推荐

  1. python爬网易云音乐评论最多的歌_使用Python爬一爬网易云音乐上那些评论火爆的歌曲...

    网易云音乐这款音乐APP本人比较喜欢,用户量也比较大,而网易云音乐之所以用户众多和它的歌曲评论功能密不可分,很多歌曲的评论非常有意思,其中也不乏很多感人的评论.但是,网易云音乐并没有提供热评排行榜和按 ...

  2. python爬虫网易云音乐评论最多的歌_使用Python爬一爬网易云音乐上那些评论火爆的歌曲...

    网易云音乐这款音乐APP本人比较喜欢,用户量也比较大,而网易云音乐之所以用户众多和它的歌曲评论功能密不可分,很多歌曲的评论非常有意思,其中也不乏很多感人的评论.但是,网易云音乐并没有提供热评排行榜和按 ...

  3. Python的网易云音乐数据分析系统 爬虫 echarts可视化 Flask框架 音乐推荐系统 源码下载

    Python的网易云音乐数据分析系统 爬虫 echarts可视化 Flask框架 音乐推荐系统 一.技术说明 网易云音乐数据(歌单.用户.歌词.评论)Python爬取Flask框架搭建ECharts. ...

  4. Python爬虫实战,matplotlib模块,Python实现网易云音乐歌单数据可视化

    前言 利用Python实现网易云音乐歌单数据可视化.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: requests模块 pandas模块 matplotli ...

  5. python爬取音乐_利用Python对网易云音乐进行爬取!无所不爬的爬虫啊!

    今天,我们利用Python 中的selenium爬取网易云音乐中林俊杰<将故事写成我们>的评论,具体界面如下: 私信小编01 获取数十套PDF!爬虫 web都有的呢! 具体代码如下: #此 ...

  6. python爬网易云_python爬网易云音乐-知了汇智

    项目名称:python爬取网易云音乐 项目背景: 利用python爬虫,selenium自动化工具对网易云音乐进行音频爬取并保存到本地.只需输入你需要下载的歌曲名字,就可用程序对歌曲(包括付费歌曲)进 ...

  7. python爬虫网易云音乐最热评论并分析_python爬虫入门 实战(三)---爬网易云音乐热门评论...

    网易云音乐 本篇涉及知识: 1.request第三方库的基本使用 2.json解析 本篇目标: 爬取指定一个歌单的所有歌曲的热门评论 (注:本篇爬取不直接解析html文本,而是直接分析获取评论的api ...

  8. Python爬虫-网易云音乐自动化爬取下载

    文章目录 前言 爬取分析 完整代码 爬取效果 拓展代码 前言 上一篇简述了如何使用 Python 爬虫自动爬取CSDN博客排行榜数据并自动整理成Excel文件,这篇文章来看看如何自动化爬取网易云音乐的 ...

  9. python爬虫网易云音乐评论再分析_爬取网易云音乐的评论后,竟有这种发现!

    原标题:爬取网易云音乐的评论后,竟有这种发现! 作者 | 志颖 责编 | 胡巍巍 用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条. 现在 ...

  10. python爬虫----网易云音乐歌曲爬取并存入Excel

    因为数据要存入Excel中,所以首要目标是找个办法将数据能够存入excel中 经过在网上一番搜索后,发现用python里的xlwt模块可以比较容易的解决 一.准备工作 1.安装xlwt模块: 可以看h ...

最新文章

  1. oracle pi 3.14,Oracle中实现圆周率计算(一)
  2. ubuntu chmod更改权限
  3. react 消息订阅-发布机制(解决兄弟组件通信问题)
  4. Oracle 数据库的基本用法
  5. 页面的主题标记--body
  6. php线程安全和非线程安全_安全调用线程的步骤
  7. 由深圳的大树所想到的
  8. 平板示波器如何进行探头的补偿和衰减系数设定-Pintech品致
  9. 1.GraspNet-API之Grasp Lable Format
  10. 机器学习基础 决策树算法
  11. 黄聪:CR2格式批量转换JPG(美图看看)
  12. SqlNullValueException: Data is Null. This method or property cannot be called on Null values.
  13. SQL Server 替换越南语(越南文)音标SQL脚本
  14. Windows10 中 Apple 云盘 iCloud Drive 默认在 C 盘下的存储目录迁移到其他盘符的指定目录
  15. 基于SURF特征提取的图像配准算法的matlab仿真
  16. 用美国主机空间的内容管理系统建站的优点
  17. 2/3G与LTE的互操作分析
  18. excel多文件查询工具
  19. 德国亚琛大学计算机排名,德国大学排名,2021德国大学各大专业排名
  20. 计算机技术五行属什么,计算机属于哪个五行属性 五行属火

热门文章

  1. C语言解题——从今天开始入坑C语言
  2. python打印输出数组中的所有元素
  3. Firefox 地址栏的“手气不错”
  4. 【阿里云】短视频SDK产品
  5. ToolB不能用了,这里有完美替代
  6. win7电脑怎么伪装ip地址【系统天地】
  7. xxx科技有限公司_公司管理制度
  8. vrp java_HCIA-VRP基础及操作
  9. mysql32位的能装在64位的电脑上吗_32位电脑能装64位系统吗|怎么看32位电脑可不可以装64位系统-系统城...
  10. CentOS 安装火狐的 flash插件