Python培训
400-996-5531
青春、爱情、梦想,是我们18岁的模样,似乎也是我们再也回不去的过去,刘若英的处女作《后来的我们》就是这样一部怀旧题材的电影,未播先火,主题曲《我们》评论更是超过10万条,想不想知道这些评论都在探讨什么,今天的Python培训干货分享就教你如何用Python语言抓取陈奕迅新歌《我们》的10万条评论,又如何做成词云图,快来看看吧!
一、抓数据
要想做成词云图表,首先得有数据才行。于是需要一点点的爬虫技巧。
基本思路为:抓包分析、加密信息处理、抓取热门评论信息
1.抓包分析
我们首先用浏览器打开网易云音乐的网页版,进入陈奕迅《我们》歌曲页面,可以看到下面有评论。接着F12进入开发者控制台(审查元素)。
接下来就要做的是,找到歌曲评论对应的url,并分析验证其数据跟网页现实的数据是否吻合,步骤如下图:
通过歌曲id轻松找到评论所在的链接。
查看hreaders的信息,发现浏览器使用的是POST的方式进行的请求。
具体字段如上图,会发现表单中需要填两个数据,名称为params和encSecKey。后面紧跟的是一大串字符,换几首歌会发现,每首歌的params和encSecKey都是不一样的,因此,这两个数据可能经过一个特定的算法进行加密过的。
服务器返回的和评论相关的数据为json格式的,里面含有非常丰富的信息(比如有关评论者的信息,评论日期,点赞数,评论内容等等),其中hotComments就是我们要找的热门评论,总共15条。
那我们的思路就很清晰了,只需要分析这个api并模拟发送请求,获取json进行解析就好了。
2.加密信息处理
然后经过我的测试,直接把浏览器上这俩数据拿过来就可以。但是要想真正的解决这个加密处理,还需要有点加解密的只是存储。
我们在这里就只需要用我们这种偷懒的办法就可以完成需求了。这里我就使用这么个临时的方法好了,而且对于不同的歌曲是可以重用的,待会我们可以验证一下。
3.抓取热门评论信息
代码块如下:
import
requests
import
json
url
=
'http://music.163.com/weapi/v1/resource/comments/R_SO_4_551816010?csrf_token=568cec564ccadb5f1b29311ece2288f1'
headers
=
{
'User-Agent'
:
'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'
,
'Referer'
:
'http://music.163.com/song?id=551816010'
,
'Origin'
:
'http://music.163.com'
,
'Host'
:
'music.163.com'
}
#加密数据,直接拿过来用
user_data
=
{
'params'
:
'vRlMDmFsdQgApSPW3Fuh93jGTi/ZN2hZ2MhdqMB503TZaIWYWujKWM4hAJnKoPdV7vMXi5GZX6iOa1aljfQwxnKsNT+5/uJKuxosmdhdBQxvX/uwXSOVdT+0RFcnSPtv'
,
'encSecKey'
:
'46fddcef9ca665289ff5a8888aa2d3b0490e94ccffe48332eca2d2a775ee932624afea7e95f321d8565fd9101a8fbc5a9cadbe07daa61a27d18e4eb214ff83ad301255722b154f3c1dd1364570c60e3f003e15515de7c6ede0ca6ca255e8e39788c2f72877f64bc68d29fac51d33103c181cad6b0a297fe13cd55aa67333e3e5'
}
response
=
requests
.
post
(
url
,
headers
=
headers
,
data
=
user_data
)
data
=
json
.
loads
(
response
.
text
)
hotcomments
=
[]
for
hotcommment
in
data
[
'hotComments'
]:
item
=
{
'nickname'
:
hotcommment
[
'user'
][
'nickname'
],
'content'
:
hotcommment
[
'content'
],
'likedCount'
:
hotcommment
[
'likedCount'
]
}
hotcomments
.
append
(
item
)
#获取评论用户名,内容,以及对应的获赞数
content_list
=
[
content
[
'content'
]
for
content
in
hotcomments
]
ickname
=
[
content
[
'nickname'
]
for
content
in
hotcomments
]
liked_count
=
[
content
[
'likedCount'
]
for
content
in
hotcomments
]
二、数据可视化
在获得相关评论数据后,我们将其做成图表与词云图,将让人看起来更直观。
接下来需要在自己电脑上安装需要相关的安装包: pyecharts(图表包)、matplotlib(绘图功能包)、 WordCloud(词云包)。
其中,pyecharts 是一个用于生成 Echarts 图表的类库。 Echarts 是百度开源的一个数据可视化 JS 库,主要用于数据可视化,同时pyecharts 兼容 Python2 和 Python3。安装非常简单,只需:pip install pyecharts
接下来就是代码的实现:
利用之前获得评论用户名和对应的点赞数,将其制作成图表图:
from
pyecharts
import
Bar
bar
=
Bar
(
"热评中点赞数示例图"
)
bar
.
add
(
"点赞数"
,
ickname
,
liked_count
,
is_stack
=
True
,
mark_line
=[
"min"
,
"max"
],
mark_point
=[
"average"
])
bar
.
render
()
由此可以看出,获得最高赞数(95056)评论是:
@鱼大叔Uncle:后来的我,离开了他,永远的离开了他,十年的感情不过寥寥几句话。后来的我,嫁给了一个很普通的人,没有他的浪漫,却有不一样的温暖。
大多数赞数为20000-30000之间,最低都达到7000+,(基本与网页里评论中数据吻合)。
最后,我们将所有的热门评论内容,制作成词云图展示出来,代码块如下:
from
wordcloud
import
WordCloud
import
matplotlib
.
pyplot
as
plt
content_text
=
" "
.
join
(
content_list
)
wordcloud
=
WordCloud
(
font_path
=
r
"C:\simhei.ttf"
,
max_words
=
200
).
generate
(
content_text
)
plt
.
figure
()
plt
.
imshow
(
wordcloud
,
interpolation
=
'bilinear'
)
plt
.
axis
(
'off'
)
plt
.
show
()
结果图:
从图中可以看出,很多人感慨,后来只有你我,再无我们。
注明:所有数据,是属于当时所爬取的数据。
三、Python培训干货分享|用Python语言将陈奕迅新歌《我们》的10万条评论做成词云图小结:
人生是一张单程票,我们没有机会重新来过,有些人啊,光是遇见就已经值得了,当成为过往时,我们要懂得放下,遥寄祝福,珍惜我们遇见的每一秒也许是对彼此最好的礼物。怎么样,用Python语言将陈奕迅新歌《我们》的10万条评论做成词云图竟给了我们这么多感悟,达内Python培训班还有很多用Python培训语言实现的、方便我们的内容等你来一起分享!
免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved