豆瓣電視劇評論的爬取以及進行情感分析+生成詞云

很多時候我們要了解一部電視劇或電影的好壞時都會去豆瓣上查看評分和評論,本文基于豆瓣上對某一部電視劇評論的爬取,然后進行SnowNLP情感分析,最后生成詞云,給人一個直觀的印象

1. 爬取評論

以前段時間比較火熱的《獵場》為例,因豆瓣網有反爬蟲機制,所以在爬取時要帶登錄后的cookie文件,保存在cookie.txt文件里,具體代碼及結果如下:

import requests, codecs
from lxml import html
import time
import random

header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'}
f_cookies = open('cookie.txt', 'r')
cookies = {}
for line in f_cookies.read().split(';'):
    name, value = line.strip().split('=', 1)
    cookies[name] = value
#print(cookies)

for num in range(0, 500, 20):
    url = 'https://movie.douban.com/subject/26322642/comments?start=' + str(
        num) + '&limit=20&sort=new_score&status=P&percent_type='
    with codecs.open('comment.txt', 'a', encoding='utf-8') as f:
        try:
            r = requests.get(url, headers=header, cookies=cookies)
            result = html.fromstring(r.text)
            comment = result.xpath( " // div[@class ='comment'] / p / text() ")
            for i in comment:
                f.write(i.strip() + '\r\n')
        except Exception as e:
            print(e)
    time.sleep(1 + float(random.randint(1, 100)) / 20)
評論爬取結果
2. 情感分析

SnowNLP是python中用來處理文本內容的,可以用來分詞、標注、文本情感分析等,情感分析是簡單的將文本分為兩類,積極和消極,返回值為情緒的概率,越接近1為積極,接近0為消極。代碼如下:

import numpy as np
from snownlp import SnowNLP
import matplotlib.pyplot as plt

f = open('comment.txt', 'r', encoding='UTF-8')
list = f.readlines()
sentimentslist = []
for i in list:
    s = SnowNLP(i)
    # print s.sentiments
    sentimentslist.append(s.sentiments)
plt.hist(sentimentslist, bins=np.arange(0, 1, 0.01), facecolor='g')
plt.xlabel('Sentiments Probability')
plt.ylabel('Quantity')
plt.title('Analysis of Sentiments')
plt.show()
情感分析結果
3. 生成詞云

詞云的生成主要用到了結巴分詞和wordcloud,前者是針對中文進行分詞的處理庫,后者可以根據分詞處理結果定制化生成詞云,詳細代碼如下:

#coding=utf-8
import matplotlib.pyplot as plt
from scipy.misc import imread
from wordcloud import WordCloud
import jieba, codecs
from collections import Counter

text = codecs.open('comment.txt', 'r', encoding='utf-8').read()
text_jieba = list(jieba.cut(text))
c = Counter(text_jieba)  # 計數
word = c.most_common(800)  # 取前500

bg_pic = imread('src.jpg')
wc = WordCloud(
    font_path='C:\Windows\Fonts\SIMYOU.TTF',  # 指定中文字體
    background_color='white',  # 設置背景顏色
    max_words=2000,  # 設置最大顯示的字數
    mask=bg_pic,  # 設置背景圖片
    max_font_size=200,  # 設置字體最大值
    random_state=20  # 設置多少種隨機狀態,即多少種配色
)
wc.generate_from_frequencies(dict(word))  # 生成詞云


wc.to_file('result.jpg')

# show
plt.imshow(wc)
plt.axis("off")
plt.figure()
plt.imshow(bg_pic, cmap=plt.cm.gray)
plt.axis("off")
plt.show()
原始圖和詞云圖
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容