最近发现一首很火的歌,瞬间让你感觉到浓浓的青春懵懂感,这就是王广允的《好喜欢你》。说实话,爬这种爱意浓浓的歌曲彷佛不是咱们这种单身XX应有的想法,可是仍是想体会一下那些青春岁月里的小幸福,话很少说,代码走起来。html
原本想这里直接贴上歌曲的连接,可是因为版权问题,你们能够去网易云自行听取哈。算法
咱们此次爬取的信息主要是评论点赞前十的数据,并据此进行数据可视化操做,生成词云。json
1、请求分析api
咱们首先打开网易云音乐的官网,进入《好喜欢你》的播放页面,而后按F12或者审查元素获取控制台信息。浏览器
咱们这里经过浏览器中的歌曲的id来获取评论的连接,这是一个很是快捷的方式,我以前尝试过不少的方法,感受都太麻烦了,这个方式简单,你们之后爬取均可以按照这种方式进行。服务器
接着就是肯定是经过get仍是post的方式来提交数据的,咱们发现Headers里面显示是Post方式:cookie
涉及到表单的提交,通常都会附带敏感信息,例如cookie,因此这里咱们就须要检查一下有没有参数遗漏了:app
咱们在Headers底下发现有一个Rorm Data里面包含两个参数params和encSecKey,待会咱们提交的时候须要带上这两个参数。若是你爬过相似的网站,你就会猜想这个可能就是标识歌曲信息和我的信息的一个加密数据,实际上这个就是那样的。本篇并不打算去介绍如何去破解这个加密算法,我打算可能下一篇来介绍一下这个破解过程。echarts
通常爬取的时候,咱们首先会预览一下数据信息,就控制台下面的preview,发现服务器返回的数据格式是json,因此咱们等下就须要把数据转换成json格式:post
看到没有,这些数据是很是具备规律的,而后就能够开始书写代码了。
一般咱们须要在headers里面添加一些host,referer,user-agent等,这是防止被网站识别出爬虫而被限制访问。
2、代码书写
1import requests 2import json 3 4 # 获取歌曲评论的url 5url = 'https://music.163.com/weapi/v1/resource/comments/R_SO_4_1320098098?csrf_token=cfb7c24b770cd1cad7f7bf6c9bcb6f29' 6 7 # 由于是post提交,采用MD5或者其余算法加密过,可是咱们能够直接使用加密后的数据,用于浏览器识别身份 8headers = { 9'Host': 'music.163.com', 10'Origin': 'https://music.163.com', 11'Referer': 'https://music.163.com/song?id=1320098098', 12'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)' 13 ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36' 14} 15 16User_Data = { 17 'params': 'ilXGpo53YAlLd7+0UutKIXmODpUQWhXl1lvPU2a7Y8vOIsFvIr/Q5QYpaSvXRgMU47q5Aa9gJkmY5KM2jS+l5gaIAzf/OmVy6ud71TFl' 18 'fyELQADIGNGSbW8PNXvNyWvPMjEImTtIxrvoOgFlLF429Tbpd/XAAnh6aQu23+hKxThzLBZhO0jdOLLgNAvm87McNgiaVfCQ+1eYws4kn5i+8jR/P/UPt9wdIM8G8qx1xmw=', 19 'encSecKey': '79c3d0f6664de1758c3ae2c3c7c9dabbb61c2a46b79fa0a8d40a842361c6ddd94d2e21594219bf98b9e4ff124fa3f5046b' 20 '1dfa60f38c35fc5511f1be314ed0bcac69a7867f2870ba01b8af7ee0900a588759b5aad499565aa45e379589a42ba150fa5e' 21 'df4afb0442f063ab212d9eb9376b4ca99f282d9520653fd808176a5e0f' 22} 23 24 # 经过post方式来提交数据 25response = requests.post(url, headers=headers, data= User_Data) 26 27# 转换成json格式便于后面数据的提取 28data = json.loads(response.text) 29hotcomments = [] 30for hotcomment in data['hotComments']: 31 item ={ 32 'nickname': hotcomment['user']['nickname'], 33 'content': hotcomment['content'], 34 'likedCount': hotcomment['likedCount'] 35 } 36 hotcomments.append(item) 37 38 # 获取评论的用户名称,内容,以及对应的点赞数 39nickname_list = [content['nickname']for content in hotcomments] 40content_list = [content['content']for content in hotcomments] 41likedCount_list = [content['likedCount']for content in hotcomments]
3、数据可视化
这里我使用了pyecharts这个开源库,它是百度Echarts对Python的实现,挺好用的。使用它须要安装一些依赖包,关于pyecharts的安装我就不介绍了,直接贴上实现数据图表的代码:
1from pyecharts import Bar 2# 图表展现 3bar = Bar('评论中点赞数显示图') 4bar.add('点赞数',nickname_list,likedCount_list, is_stack=True, mark_line=['min', 'max'], mark_point=['average'] ) 5bar.render()
代码是否是不多,它会在当前的目录下面生成一个render.html文件,你用浏览器打开就是这样:
接下来即是生成词云了,这里也是贴上实现词云的代码:
1from wordcloud import WordCloud 2import matplotlib.pyplot as plt 3# 词云展现 4content_text = " ".join(content_list) 5wordcloud = WordCloud(font_path=r"F:\字体\21\YGY20070701.ttf",max_words=200).generate(content_text) 6plt.figure() 7plt.imshow(wordcloud,interpolation='bilinear') 8plt.axis('off') 9plt.show()
代码也是比较少的,系统会生成一个图片。若是你使用pycharm这个IDE,你就会看到这样相似的图片:
最后我把点赞前十的评论都给贴出来,你们好好感觉一下:
一、阴天雨天晴天,都不如你和我聊天。
二、我高中同窗,上课坐在后面喜欢听歌 喜欢戴墨镜在学校里穿梭 喜欢耍酷 走到哪都是一道风景!学校每次演出 他都会参与 每次出场都会响起一阵女生崇拜的尖叫声。毕业后常常会在综艺选秀节目看到他的身影 当时会以为他可能会成为一个大明星。时至今日 他如今的成就 和他的努力成正比 。
三、有本事你就照顾好本身,否则就老老实实地让我来照顾你一生。
四、不是在撩你,是真的想和你在一块儿。 也不是一点点喜欢你,是好喜欢好喜欢你。
五、我会在每一分钟的60秒每个小时的60分钟每一天的24小时每个星期的7天每个月的31天每年的365天想你,可是表白找不到人怎么办? 啊哈。
六、我试过一我的回家,我也试过一我的吃饭,一我的低头学习,一我的拿行李箱。能够亲爱的,由于你我认识了更多志同道合又惺惺相惜的人啊,你是我口袋里的男友,我多想有一天,本身很努力很优秀,只要静静的看着在台上闪闪发光的你就行了,一路披荆斩棘,也谢谢你这么优秀[爱心],此次换咱们来保护你了。
七、今天是分手的第23天,我得心情不是很美妙。我选择忘记,从新开始,你昨晚缺还来找我!大胆!扰乱个人心神! 虽然我是个卖jia表的,可是你不能瞧不起我啊!。
八、阴天雨天晴天,都不如我这里的PT鞋。
九、我是同性恋,我超喜欢个人同桌。虽然你们都不承认,可我始终相信咱们必定能够在一块儿的。郑浩!我爱你!
十、我还喜欢你,并不仅是说说而已。但愿你之后不要再遇到我这样的人,敏感 总爱瞎想 胆小怕事 懦弱 又不能让你快乐 也不能让你喜欢我 你很累吧 可是又但愿你遇到像我这样的人 由于这样的人真的真的好喜欢你啊[哀伤]。
看到这里,我想说大家尽管秀,能伤害到我,就算我输,毕竟单身多年也是凭实力的。。。。。