python文本挖掘与分析:热剧《延禧攻略》用户评论分析
需要用到的工具:pycharm编辑器,python3
主要用到的库:re,urllib,requests,time,BeautifulSoup,selenium,numpy,matplotlib,jieba,scipy,WordCloud
整体流程分为两部分
1.用户评论信息的获取。
2.文本数据挖掘,先对百度视频评论进行文本分析,再对豆瓣影评进行分析,得出结论。
首先来介绍用户评论信息的获取:
这里利用python爬虫对百度视频、豆瓣影评进行数据抓取。
一、百度视频评论抓取:
1.进入百度视频网站搜索延禧攻略,往下拉可进入如下页面,此时的url为http://v.baidu.com/tv/27918.html?frm=browse
2.右键查看网页源代码,查看用户评论不在网页源代码中,这时需要用fiddler对网址进行抓包,找出评论信息所在的网址。
3.写出爬虫程序,调试运行,运行结果如下:
百度视频爬取源代码:
import time import re import urllib.error for j in range(1, 285): url = 'http://v.baidu.com/uc/comment/list?callback=jQuery111108193683500820239_1535160749870&page='+str(j)+'&workstype=tvplay&works_id=27918&_=1535160749879' headers = ('User-Agent', 'xxx')#根据自己的浏览器指定 opener = urllib.request.build_opener() opener.addheaders = [headers] data = opener.open(url).read().decode('unicode_escape','ignore')#进行解码的步骤是关键 #print(data) #yy = data.json() print(j) pat = 'content":"(.*?)"' title = re.compile(pat).findall(data) time.sleep(1) f = open('C:/Users/Administrator/Desktop/date1.txt', 'a') for i in range(0,len(title)): #print(title[i]) #title[i] = i.encode('latin-1').decode('unicode_escape') #writeExcel(row=row, title1=title[i]) #row += 1 try: f.write(title[i]) f.write('\n') # 关闭文件 except Exception: pass continue try: f.close() except Exception: pass
二、延禧攻略豆瓣评论抓取,此抓取过程不详细说了,有时间了后续更新在另一博文上,有兴趣的可以来看看。
三、对百度视频评论进行文本分析,并用词云展示。
首先写文件导入函数,把抓取的评论导入进来
text = open("C:/Users/Administrator/Desktop/date6.txt", "rb").read()
然后用jieba分词对抓取的评论进行分词
seg_list = " ".join(jieba.cut(doc, cut_all=False))
分词后的文件,需要去除停用词,得到去停用词的文件后可以制作词云,统计词频画图展示
代码如下:
import jieba from scipy.misc import imread import matplotlib.pyplot as plt from wordcloud import WordCloud, ImageColorGenerator def readDocument(): text = open("C:/Users/Administrator/Desktop/date6.txt", "rb").read() return text def segment(doc): seg_list = " ".join(jieba.cut(doc, cut_all=False)) #seg_list为str类型 document_after_segment = open('分词结果.txt', 'w+') document_after_segment.write(seg_list) document_after_segment.close() return seg_list def wordCount(segment_list): word_list = [] word_dict = {} with open('C:/Users/Administrator/Desktop/去停用词的词频统计.txt','w') as xr: word_list.append(segment_list.split(' ')) #print(word_list) for item in word_list: for item2 in item: if item2 not in word_dict: word_dict[item2] = 1 else: word_dict[item2] += 1 print(word_dict) #print(dict(zip(word_dict_sorted))) #print(type(word_dict_sorted)) #for (K, V) in sorted(word_dict_sorted.items(), key=lambda x: x[1]): #print(K, '=>', V) l = len(word_dict) count = 0 out = open('C:/Users/Administrator/Desktop/词频统计.txt','w') for (K, V) in sorted(word_dict.items(), key=lambda x: x[1],reverse=True): out.write(K+' '+str(V)+'\n') count +=1 if count>=l/2: break out.close() xr.close() def drawWordCloud(seg_list): ''' 制作词云 设置词云参数 ''' color_mask = imread("C:/Users/Administrator/Desktop/timg.jpg") # 读取背景图片,注意路径 wc = WordCloud( #设置字体,不指定就会出现乱码,注意字体路径 font_path="C:\Windows\Fonts\simkai.ttf", #font_path=path.join(d,'simsun.ttc'), #设置背景色 background_color='white', stopwords=["哈哈哈"], mask=color_mask, #允许最大词汇 max_words=2000, #最大号字体 max_font_size=60 ) wc.generate(seg_list) # 产生词云 image_colors = ImageColorGenerator(color_mask) wc.to_file("doubanpl.jpg") #保存图片 # 显示词云图片 plt.imshow(wc, interpolation="bilinear") plt.axis('off') plt.figure() plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear") plt.axis("off") plt.show() def removeStopWords(seg_list): wordlist_stopwords_removed = [] stop_words = open('C:/Users/Administrator/Desktop/stop.txt')#需要下载停用词表 stop_words_text = stop_words.read() stop_words.close() stop_words_text_list = stop_words_text.split('\n') after_seg_text_list = seg_list.split(' ') for word in after_seg_text_list: if word not in stop_words_text_list: wordlist_stopwords_removed.append(word) without_stopwords = open('C:/Users/Administrator/Desktop/去停用词的分词结果.txt', 'w') without_stopwords.write(' '.join(wordlist_stopwords_removed)) return ' '.join(wordlist_stopwords_removed) if __name__ == "__main__": doc = readDocument() segment_list = segment(doc) segment_list_remove_stopwords = removeStopWords(segment_list) drawWordCloud(segment_list_remove_stopwords) wordCount(segment_list_remove_stopwords)
百度视频评论词云图:
从词云可以看出好看、璎珞、贵妃、女主、喜欢、不错、皇后、皇上出现的频次多,可以得出结论大部分人还是觉得延禧攻略是好看的,尤其喜欢里面的女主和皇后。但一次的分析可能会有误差,毕竟数据量不多,不能以偏概全,接下来看看豆瓣影评的分析结果。
数据导入过程和百度视频评论相同,这里不再累述,直接看结果吧。
豆瓣评论词云图:
从这个词云可以看出延禧、攻略、演技、主角、光环、皇后、富察、女主、性格等词汇出现的频次高,与百度视频评论分析相比较可知有一部分词汇相同如:皇后、女主,证明大众喜爱的就是女主和皇后,其他不同的词汇分析得出,虽然词汇不同但都是在说这部剧的好,所以整体上延禧攻略确实是部好剧!已经更新完了,没看的快去看吧!