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)

百度视频评论词云图:

从词云可以看出好看、璎珞、贵妃、女主、喜欢、不错、皇后、皇上出现的频次多,可以得出结论大部分人还是觉得延禧攻略是好看的,尤其喜欢里面的女主和皇后。但一次的分析可能会有误差,毕竟数据量不多,不能以偏概全,接下来看看豆瓣影评的分析结果。

数据导入过程和百度视频评论相同,这里不再累述,直接看结果吧。

豆瓣评论词云图:

从这个词云可以看出延禧、攻略、演技、主角、光环、皇后、富察、女主、性格等词汇出现的频次高,与百度视频评论分析相比较可知有一部分词汇相同如:皇后、女主,证明大众喜爱的就是女主和皇后,其他不同的词汇分析得出,虽然词汇不同但都是在说这部剧的好,所以整体上延禧攻略确实是部好剧!已经更新完了,没看的快去看吧!

猜你喜欢

转载自blog.csdn.net/sinat_38357352/article/details/82183383