在前段時間看了傑昆菲尼克斯的小丑電影,內心很好奇大部分觀衆看完這部電影以後對此有什麼評價,而後看了看豆瓣短評以後,以爲經過python把短評中出現最多的單詞提取出來,作成一張詞雲,看看這部電影給觀衆們留下的關鍵詞是什麼。python
首先剛開始的時候 ,是經過requests去模擬抓取數據,發現短評翻頁翻到20頁以後就須要登陸豆瓣用戶纔有權限查看,因此打算經過使用selenium模擬瀏覽器動做自動化將頁面中的數據爬取下來,而後存儲到特定的txt文件,因爲沒打算作其餘的分析,就不打算存放到數據庫中。web
關於流行的自動化測試框架selenium的工做原理,以及selenium和chromdriver對應的版本安裝就不詳細贅述,有興趣的同窗能夠參考:
https://blog.csdn.net/weixin_43241295/article/details/83784692chrome
從頁面上看來,大概流程就是點擊導航欄中的密碼登陸,而後輸入用戶名和密碼,點擊登陸按鈕,至於看網上一些豆瓣爬蟲時會出現的驗證圖片,我沒有遇到過,我直接登陸就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")
這是我本身扣的一張圖片做爲背景:less
最終效果圖:ide
寫爬蟲到數據分析,大概有思路以及整理須要用到的工具大概花了兩個晚上。總體來講,仍是一些比較淺顯易懂的東西,對於有關爬蟲大規模併發採集 以及數據分析等內容還在學習,記錄下本身學習過程仍是蠻有趣的。工具