簡單爬取《小丑》電影豆瓣短評生成詞雲

導語

 在前段時間看了傑昆菲尼克斯的小丑電影,心裏很好奇大部分觀衆看完這部電影之後對此有什麼評價,然後看了看豆瓣短評之後,覺得通過python把短評中出現最多的單詞提取出來,做成一張詞雲,看看這部電影給觀衆們留下的關鍵詞是什麼。

抓取數據

 首先剛開始的時候 ,是通過requests去模擬抓取數據,發現短評翻頁翻到20頁之後就需要登錄豆瓣用戶纔有權限查看,所以打算通過使用selenium模擬瀏覽器動作自動化將頁面中的數據爬取下來,然後存儲到特定的txt文件,由於沒打算做其他的分析,就不打算存放到數據庫中。

關於selenium和chromedriver安裝

 關於流行的自動化測試框架selenium的工作原理,以及selenium和chromdriver對應的版本安裝就不詳細贅述,有興趣的同學可以參考:
https://blog.csdn.net/weixin_43241295/article/details/83784692

分析豆瓣登錄頁面用戶登錄流程

簡單爬取《小丑》電影豆瓣短評生成詞雲
簡單爬取《小丑》電影豆瓣短評生成詞雲

 從頁面上看來,大概流程就是點擊導航欄中的密碼登錄,然後輸入用戶名密碼,點擊登錄按鈕,至於看網上一些豆瓣爬蟲時會出現的驗證圖片,我沒有遇到過,我直接登錄就OK了,所以接下來就需要通過selenium模擬整個登錄過程。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

def crawldouban():
    name = "你的用戶名"
    passw = "你的密碼"

    # 啓動chrome
    options = Options()
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    browser = webdriver.Chrome(executable_path="/usr/bin/chromedriver", options=options)

    # 獲取登錄網址
    browser.get("https://accounts.douban.com/passport/login")
    time.sleep(3)

    # 登錄自動化操作流程
    browser.find_element_by_class_name("account-tab-account").click()
    form = browser.find_element_by_class_name("account-tabcon-start")
    username = form.find_element_by_id("username")
    password = form.find_element_by_id("password")     
    username.send_keys(name)
    password.send_keys(passw)
    browser.find_element_by_class_name("account-form-field-submit").click()
    time.sleep(3)

獲取用戶評論

 接下來就是,獲取頁面中的評論,然後將評論存儲到指定的文本文件中,(我就不模擬查詢電影然後,跳轉到短評的整個過程了),直接從拿到的短評頁面地址出發,不斷點擊下一頁然後不斷重複提取評論,寫入的操作

簡單爬取《小丑》電影豆瓣短評生成詞雲簡單爬取《小丑》電影豆瓣短評生成詞雲

    browser.get("https://movie.douban.com/subject/27119724/comments?status=P")
    comments = browser.find_elements_by_class_name("short")
    WriteComment(comments)

    while True:
        link = browser.find_element_by_class_name("next")
        path = link.get_attribute('href')
        if not path:
            break
        # print(path)    
        link.click()
        time.sleep(3)
        comments = browser.find_elements_by_class_name("short")
        WriteComment(comments)
    browser.quit()        

# 將評論寫入到指定的文本文件           
def WriteComment(comments):
        with open("comments.txt", "a+") as f:
                for comment in comments:
                        f.write(comment.text+" \n")  

 代碼解析:抓取的代碼沒啥好講的,就是找到classname是'short‘的元素,獲取裏面的文本內容寫到指定文本文件即可,裏面主要有個循環判斷是否還有下一頁,通過獲取下一頁的超鏈接,當獲取不到時證明已經在最後一頁了。

數據分詞,生成詞雲圖

 大概講講思路吧,我這裏的數據處理比較粗糙,沒有結合pandas+numpy,我將爬取下來的數據,簡單的將換行符切割然後組成新的數據,然後通過jieba分詞,將新的數據進行分詞,最後再讀取本地的一個停頓詞文件獲取一個停頓詞列表。生成詞雲指定停頓詞,以及字體文件,背景顏色等,再把詞雲圖片保存到本地。

from wordcloud import WordCloud
from scipy.misc import imread
import jieba

# 處理從文本中讀取的內容
def text_read(file_path):
    filename = open(file_path, 'r', encoding='utf-8')
    texts = filename.read()
    texts_split = texts.split("\n")
    filename.close()

    return texts_split

def data_handle(picture_name):
    # 讀取從網站上爬取下來的數據
    comments = text_read("comments.txt")
    comments = "".join(comments)

    # 分詞, 讀取停頓詞
    lcut = jieba.lcut(comments)
    cut_text = "/".join(lcut)
    stopwords = text_read("chineseStopWords.txt")

    # 生成詞雲圖
    bmask = imread("backgrounds.jpg")
    wordcloud = WordCloud(font_path='/usr/share/fonts/chinese/simhei.ttf', mask=bmask, background_color='white', max_font_size=250, width=1300, height=800, stopwords=stopwords)
    wordcloud.generate(cut_text)
    wordcloud.to_file(picture_name)

if __name__ == "__main__":
    data_handle("joker6.jpg")

這是我自己扣的一張圖片作爲背景:

簡單爬取《小丑》電影豆瓣短評生成詞雲

最終效果圖:

簡單爬取《小丑》電影豆瓣短評生成詞雲

總結

 寫爬蟲到數據分析,大概有思路以及整理需要用到的工具大概花了兩個晚上。整體來說,還是一些比較淺顯易懂的東西,對於有關爬蟲大規模併發採集 以及數據分析等內容還在學習,記錄下自己學習過程還是蠻有趣的。

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