溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

簡(jiǎn)單爬取《小丑》電影豆瓣短評(píng)生成詞云

發(fā)布時(shí)間:2020-07-01 23:11:41 來(lái)源:網(wǎng)絡(luò) 閱讀:881 作者:林樹楷 欄目:編程語(yǔ)言

導(dǎo)語(yǔ)

?在前段時(shí)間看了杰昆菲尼克斯的小丑電影,心里很好奇大部分觀眾看完這部電影之后對(duì)此有什么評(píng)價(jià),然后看了看豆瓣短評(píng)之后,覺(jué)得通過(guò)python把短評(píng)中出現(xiàn)最多的單詞提取出來(lái),做成一張?jiān)~云,看看這部電影給觀眾們留下的關(guān)鍵詞是什么。

抓取數(shù)據(jù)

?首先剛開始的時(shí)候 ,是通過(guò)requests去模擬抓取數(shù)據(jù),發(fā)現(xiàn)短評(píng)翻頁(yè)翻到20頁(yè)之后就需要登錄豆瓣用戶才有權(quán)限查看,所以打算通過(guò)使用selenium模擬瀏覽器動(dòng)作自動(dòng)化將頁(yè)面中的數(shù)據(jù)爬取下來(lái),然后存儲(chǔ)到特定的txt文件,由于沒(méi)打算做其他的分析,就不打算存放到數(shù)據(jù)庫(kù)中。

關(guān)于selenium和chromedriver安裝

?關(guān)于流行的自動(dòng)化測(cè)試框架selenium的工作原理,以及selenium和chromdriver對(duì)應(yīng)的版本安裝就不詳細(xì)贅述,有興趣的同學(xué)可以參考:
?https://blog.csdn.net/weixin_43241295/article/details/83784692

分析豆瓣登錄頁(yè)面用戶登錄流程

簡(jiǎn)單爬取《小丑》電影豆瓣短評(píng)生成詞云
簡(jiǎn)單爬取《小丑》電影豆瓣短評(píng)生成詞云

?從頁(yè)面上看來(lái),大概流程就是點(diǎn)擊導(dǎo)航欄中的密碼登錄,然后輸入用戶名密碼,點(diǎn)擊登錄按鈕,至于看網(wǎng)上一些豆瓣爬蟲時(shí)會(huì)出現(xiàn)的驗(yàn)證圖片,我沒(méi)有遇到過(guò),我直接登錄就OK了,所以接下來(lái)就需要通過(guò)selenium模擬整個(gè)登錄過(guò)程。

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

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

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

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

    # 登錄自動(dòng)化操作流程
    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)

獲取用戶評(píng)論

?接下來(lái)就是,獲取頁(yè)面中的評(píng)論,然后將評(píng)論存儲(chǔ)到指定的文本文件中,(我就不模擬查詢電影然后,跳轉(zhuǎn)到短評(píng)的整個(gè)過(guò)程了),直接從拿到的短評(píng)頁(yè)面地址出發(fā),不斷點(diǎn)擊下一頁(yè)然后不斷重復(fù)提取評(píng)論,寫入的操作

簡(jiǎn)單爬取《小丑》電影豆瓣短評(píng)生成詞云簡(jiǎn)單爬取《小丑》電影豆瓣短評(píng)生成詞云

    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()        

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

?代碼解析:抓取的代碼沒(méi)啥好講的,就是找到classname是'short‘的元素,獲取里面的文本內(nèi)容寫到指定文本文件即可,里面主要有個(gè)循環(huán)判斷是否還有下一頁(yè),通過(guò)獲取下一頁(yè)的超鏈接,當(dāng)獲取不到時(shí)證明已經(jīng)在最后一頁(yè)了。

數(shù)據(jù)分詞,生成詞云圖

?大概講講思路吧,我這里的數(shù)據(jù)處理比較粗糙,沒(méi)有結(jié)合pandas+numpy,我將爬取下來(lái)的數(shù)據(jù),簡(jiǎn)單的將換行符切割然后組成新的數(shù)據(jù),然后通過(guò)jieba分詞,將新的數(shù)據(jù)進(jìn)行分詞,最后再讀取本地的一個(gè)停頓詞文件,獲取一個(gè)停頓詞列表。生成詞云指定停頓詞,以及字體文件,背景顏色等,再把詞云圖片保存到本地。

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

# 處理從文本中讀取的內(nèi)容
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):
    # 讀取從網(wǎng)站上爬取下來(lái)的數(shù)據(jù)
    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")

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

簡(jiǎn)單爬取《小丑》電影豆瓣短評(píng)生成詞云

最終效果圖:

簡(jiǎn)單爬取《小丑》電影豆瓣短評(píng)生成詞云

總結(jié)

?寫爬蟲到數(shù)據(jù)分析,大概有思路以及整理需要用到的工具大概花了兩個(gè)晚上。整體來(lái)說(shuō),還是一些比較淺顯易懂的東西,對(duì)于有關(guān)爬蟲大規(guī)模并發(fā)采集 以及數(shù)據(jù)分析等內(nèi)容還在學(xué)習(xí),記錄下自己學(xué)習(xí)過(guò)程還是蠻有趣的。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI