【Python成長之路】卡薩帝冰箱能買嗎?讓數據來說話!

哈嘍大家好,我是鵬哥。

 

今天我想與記錄的是 —— python爬蟲及文本情感分析

 

~~~上課鈴~~~

 

微微傅如喬 - 微微

1

寫在前面

最近家裏裝修進度將近,因此家電採購的挑選就成了我空閒時間的填塞物。要買什麼牌子的冰箱?哪些功能比較關鍵?……一開始是聽從我爸的意見,想買卡薩帝BCD-520WICHUI,但是有一天心血來潮,想看看網上對這款冰箱的評價,所以就來一波python爬蟲網友們的評論及自動完成相關的情感分析,讓數據告訴你網友們對卡薩帝的評價。

2

效果展示

1、知乎話題(“卡薩帝冰箱怎麼樣”)的爬蟲上千評論描述:

 

2、詞雲圖分析

3、基於SnowNLP的情感分析

 

3

知識串講(敲黑板啦)

(1)selenium爬蟲

這裏 selenium爬蟲對象,我選擇的是知乎。當然淘寶、京東等網站也是一樣能爬蟲的,只是這些網站上一般真實的差評會很少,經常會被店家各種處理,所以我選擇知乎,至少我個人認爲相當真實些。

爬蟲流程:cookies保存、selenium庫使用(登錄知乎網站、爬取各類評價)。整體來說沒有什麼新的內容,所以我不再複述了,可以參考:

【Python成長之路】Boss直聘爬蟲第2彈:selenium找不到元素的常見問題

當然,如果想要我的源碼,可以到github上下載:

https://github.com/yuzipeng05/zhihu_spider.git

這裏可能會有一個坑:如何將中文轉成url碼

因爲訪問知乎url時,如下:

但是複製後會變成:

https://www.zhihu.com/search?q=%E5%8D%A1%E8%90%A8%E5%B8%9D%E5%86%B0%E7%AE%B1%E6%80%8E%E4%B9%88%E6%A0%B7&utm_content=search_history&type=content

因此實際url是將“卡薩帝冰箱怎麼樣”進行了url轉義。解決方法是用urllib庫:

# 錯誤用法,會報找不到quote方法urllib.quote(question)   # 正確用法urllib.parse.quote(question)

(2)詞雲圖分析

詞雲圖分析,之前也已經寫過文章了,可以參考:

【Python成長之路】詞雲圖製作

其實從效果來看,詞雲圖需要對數據要求比較高,像爬蟲的上千條評論進行繪製詞雲圖是看不出什麼內容的,只是看上去花裏胡哨而已。如果是關鍵詞和頻率明確的話,效果纔好。

 

(3)基於snownlp的情感分析

正是由於詞雲圖無法幫助我快速從評價中得到結論:這款冰箱質量到底行不行啊?所以我這邊又利用了snownlp庫。

使用方法很簡單,將comment文本作爲 入參傳給snownlp類,然後就會得到0-1的情感分析,其中0表示評價極差,1表示評價極好。​​​​​​​

s = SnowNLP(comment)print(s.sentiments)

從這張情感分析的直方圖數據來看,多數評價其實是0.5,這裏是因爲爬取到的內容中,有很多文字是單獨地介紹產品信息,包括和其他產品的對比,因此判斷爲中性評價。下面我簡單地列幾條差評截圖。

(4)繪圖

繪圖這塊,可以用matplotlib庫,也可以pyecharts庫。

其中在使用pyecharts 庫有3個坑:

(1)通過pip install pyecharts庫經常超時

規避方法:通過清華大學的鏡像下載,會加速很多,親測有效

pip install --index https://mirrors.ustc.edu.cn/pypi/web/simple/ pyecharts

(2)在如示例代碼進行調用 Pie方法時,會報無法導入Bar、Pie、Map等。這裏主要是因爲新版本pyecharts庫重構了方法,需要如下使用。

# 老版本pyechartsfrom pyecharts import Pie# 新版本pyecharts,但這條命令仍然有坑,看第3條from pyecharts.charts import Pie

(3)新版本Pyecharts用以下命令時,

from pyecharts.charts import Pie

會報AttributeError: 'str' object has no attribute 'get'

規避方法:在一開始安裝pyecharts時,要明確版本號,如pyecharts==0.1.9.4

4

示例代碼

(1) snownlp情感分析的示例代碼:

# coding=utf-8

# @公衆號 : "鵬哥賊優秀"# @Date : 2020/5/15# @Software : PyCharm # @Python version: Python 3.7.2
from snownlp import SnowNLPfrom pyecharts import Pieimport matplotlib.pyplot as pltimport numpy as np

def emotion_analysis(file):    f = open(file, "r")    comments = f.readlines()    sentimentslist = []    for comment in comments:        s = SnowNLP(comment)        print(s.sentiments)        sentimentslist.append(s.sentiments)            # 繪製直方圖    # plt.hist(sentimentslist, bins=np.arange(0, 1, 0.01), facecolor='red')    # plt.xlabel('Sentiments Probability')    # plt.ylabel('Quantity')    # plt.title('Emotion Analysis')    # plt.show()        # 繪製圓餅圖    attr = ["很差", "較差", "一般", "較好", "很好"]    v1 = [0 for i in range(5)]    for i in sentimentslist:        if i <= 0.2:            v1[0] = v1[0] + 1        elif 0.2 < i <= 0.4:            v1[1] = v1[1] + 1        elif 0.4 < i <= 0.6:            v1[2] = v1[2] + 1        elif 0.6 < i <= 0.8:            v1[3] = v1[3] + 1        else:            v1[4] = v1[4] + 1    pie = Pie('商品評價圓餅圖')    pie.add("", attr, v1,is_label_show=True)    pie.render()
if __name__ == "__main__":    emotion_analysis("卡薩帝冰箱怎麼樣_內容.txt") 

 (2)知乎爬蟲示例代碼(cookies記錄的相關代碼就不附了):​​​​​​​

# coding=utf-8# @公衆號 : "鵬哥賊優秀"# @Date : 2020/5/15# @Software : PyCharm # @Python version: Python 3.7.2
from record_cookies import *import urllib

def zhihu(question):    url = 'https://www.zhihu.com/search?type=content&q={}'.format(urllib.parse.quote(question))    option = webdriver.ChromeOptions()    option.add_experimental_option('excludeSwitches', ['enable-automation'])    driver = webdriver.Chrome('F:\\Python成長之路\\chromedriver.exe', options=option)    driver.maximize_window()    driver.get(url)    time.sleep(3)    # 加載cookies    cookies = Cookies(driver)    cookies.add_cookies()    driver.get(url)    time.sleep(3)    # 加載所有搜索結果    for i in range(5):        js = 'var action=document.documentElement.scrollTop=50000'        driver.execute_script(js)    time.sleep(3)    titles = driver.find_elements_by_xpath('//h2[@class="ContentItem-title"]/div/a')    hrefs = []    for title in titles:        hrefs.append(title.get_attribute('href'))    print(hrefs)
    # 對每一篇文章進行爬取評論    for href in hrefs:        driver.get(href)        for i in range(5):            try:                comment_btn = driver.find_element_by_xpath \                    ('//a[@class="QuestionMainAction ViewAll-QuestionMainAction"]')                comment_btn.click()                time.sleep(3)            except:                pass            finally:                js = 'var action=document.documentElement.scrollTop=50000'                driver.execute_script(js)                time.sleep(1)        contents = driver.find_elements_by_xpath('//p')        with open(question + '_內容.txt', 'a') as f:            for content in contents:                try:                    f.write(content.text+'\n')                except:                    pass    driver.close()

if __name__ == "__main__":    question = '卡薩帝冰箱怎麼樣'    zhihu(question)

5

總結

下面我總結下自己這一週看冰箱下來的心得。

【參考】:https://zhuanlan.zhihu.com/p/136074643

 

~~~下課鈴~~~

 

【往期熱門文章】:

【Python成長之路】10行代碼教你免費觀看無廣告版的《慶餘年》騰訊視頻

【Python成長之路】如何用python開發自己的iphone應用程序,並添加至siri指令

【Python成長之路】從 零做網站開發 -- 基於Flask和JQuery,實現表格管理平臺

點擊下方詩句,可以留言互動喔  

 

濃墨難沾心事,寒夜怎寄相思。沉默有時念想有時。

【關注“鵬哥賊優秀”公衆號,回覆“python學習材料”,將會有python基礎學習、機器學習、數據挖掘、高級編程教程等100G視頻資料,及100+份python相關電子書免費贈送!】

 

掃描二維碼

    與鵬哥一起

學python吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章