环境:Ubuntu16.4 python版本:3.6.4 库:wordcloud
这次我们要讲的是爬取QQ音乐的评论并制成云词图,我们这里拿周杰伦的等你下课来举例。
第一步:获取评论
我们先打开QQ音乐,搜索周杰伦的《等你下课》,直接拉到底部,发现有5000多页的评论。
这时候我们要研究的就是怎样获取每页的评论,这时候我们可以先按下F12,选择NetWork,我们可以先点击小红点清空数据,然后再点击一次,开始监控,然后点击下一页,看每次获取评论的时候访问获取的是哪几条数据。最后我们就能看到下图的样子,我们发现,第一条数据就是我们所要找的内容,点击第一条数据,打开它的response拉到最下面,发现他的最后一条评论rootcommentcontent跟我们网页中最后一条评论是一致的,那这时候已经成功了一般了,我们接下来只需要研究这条数据获取的规律就可以获取到所有的评论了。
我们先查看这条数据的Headers分析下Request URL,通过点开不同的页码进行比较,发现每次发出的情况网址大部分内容是相同,不同的地方有两个,就是pagenum跟JsonCallBack,pagenum从英文上很明显能看出来就是页码,JsonCallBack又是啥呢?
https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg"text-align: center">
我们不妨将网址直接放在地址栏打开看看是怎样。我们可以发现是直接返回一个不正规的json格式,为什么说是不正规呢?因为他在开头多了个
jsoncallback7494258674829413
这个就是我们上面那个不知道怎么来的参数,我们尝试在把这个数据改一下后再打开网址,结果发现,获取的json内容是没有变化,唯一变的是开头jsoncallback1111111111
变成了我们输入的那个数值,所以我们可以猜测这是一个随机数,无论你输入什么,都不会影响我们要获取的内容。那这样就好办多了。
我们就直接放代码获取:
import requests import json def get_comment(): for i in range(1,7000): # 打印页码 print(i) # headers头部 headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0', 'Referer': "https://y.qq.com/n/yqq/song/0031TAKo0095np.html"} # 请求的url url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg"jsoncallback06927647062927766(") html = html.replace(")","") # 去掉两边的空格 html = html.strip() # 将处理后的json转为python的json data = json.loads(html) # 获取json中评论的部分 list = data['comment']['commentlist'] # 每次都重新定义一个列表来存储每一页的评论 content = [] # 遍历当前页的评论并通过调用write()函数来保存 for i in list: # 偶尔也会有一页的评论获取不到,这时候如果报错了可以直接忽略那一页,继续运行 try: content.append(i['rootcommentcontent'].replace("[em]","").replace("[/em]","").replace("e400","")) except KeyError: content = [] break write(content) # 将当前页面的评论传递过来 def write(content): # 打开一个文件,将列表的内容一行一行的存储下来 with open('comments.txt', 'a', encoding = 'UTF-8') as f: for i in range(len(content)): # 因为转为json后\n不胡自动换行,所以我们这里将\n给手换行 string = content[i].split("\\n") for i in string: # 因为出现了很多评论被删除的情况,所有我们把这句给过滤掉 i = i.replace("该评论已经被删除", "") # 打印每条评论 print (i) # 将评论写入文本 f.writelines(i) # 给评论换行 f.write("\n") if __name__ == "__main__": get_comment()
写入文档的内容大概就是这样:
获取完之后我们就能用wordcloud来进行词云图的制作了:
# -*- coding: utf-8 -*- import jieba from wordcloud import WordCloud, STOPWORDS from os import path from scipy.misc import imread # 读取mask/color图片 d = path.dirname(__file__) color_mask = imread("cyx.png") #将爬到的评论放在string中 with open('nbzd.txt', 'r', encoding = 'UTF-8') as f: string = f.read() word = " ".join(jieba.cut(string)) wordcloud = WordCloud(background_color='white', mask=color_mask, max_words=100, stopwords=STOPWORDS, font_path='/home/azhao/桌面/素材/simsun.ttc', max_font_size=100, random_state=30, margin=2).generate_from_text(word) import matplotlib.pyplot as plt plt.imshow(wordcloud, interpolation='bilinear') plt.axis("off") plt.show()
最后展示的结果是这样的:
以上这篇用Python爬取QQ音乐评论并制成词云图的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]