電影《戰狼2》的可視化分析
《戰狼2》真心堪稱中國的好萊塢大片,不管是打鬥場景的展現,還是在特效的細節處理。吳京的那句「我只會花錢在武器上,花在取景上,永遠不會花在小鮮肉上!」,也是近年來,觀眾對小鮮肉霸屏一種情懷的共鳴。基於對《戰狼2》這麼高熱度的好奇,所以想爬取豆瓣電影上《戰狼2》的評論,並做成詞雲,可視化展示觀眾對它的實際評論到底如何。核心流程分為3步:爬取評論,評論分詞,繪製評論詞雲。詞雲圖效果如下:
源碼詳見Github:zhanlang_analyze
爬取豆瓣電影《戰狼2》評論
在豆瓣電影上爬取點擊了最高的10000個評論。豆瓣電影在不登錄的情況下,只能查看前200條評論,登錄後則沒有這個限制,所以需要登錄後才能完整的爬取10000條評論。如果直接使用模擬登錄的方式,豆瓣在登錄時是需要輸入驗證碼,即使用模擬登錄的方式難度較大,所以直接使用標識已登錄的cookie(dbcl2), 這個cookie的定位需要多次測試排除。核心代碼如下:
def main(): session =requests.session() # 手動粘取登錄後的cookie信息,dbcl2對應的值。 cookies = {"dbcl2": ""} for index in xrange(7000, 10000, 20): # 爬取戰狼評論 logger.info(u"爬取戰狼第{}條評論".format(index)) try: response = session.get("https://movie.douban.com/subject/26363254/comments?start={}&limit=20&sort=new_score&status=P".format(index), cookies=cookies) if response.status_code != 200: logger.error("failed, response status is {} not 200".format(response.status_code)) break else: logger.info("success.") except Exception as e: logger.exception(e) # 解析評論 selector = etree.HTML(response.content) items = selector.xpath("//*[@id="comments"]/div") comments = [] for item in items: try: comment = item.xpath(".//*[@class="comment"]/p/text()")[0].strip() comments.append(comment) except IndexError: pass # 保存到文件 file_path = os.path.join(BASE_DIR, "zhanlang_comments") with open(file_path, "a") as f: for comment in comments: f.write("{}
".format(comment)) sleep(5)
運行爬蟲
評論分詞
在這裡選擇了一個比較通用的中文分詞詞庫jieba,調用它的textrank()函數對爬取的評論進行分詞並歸併。因為在繪製詞雲時需要關鍵詞的頻度(權值),所以設置wthWeight=True. 並設置MAX_WORDS = 500取出現頻率最高的500個片語。
官方文檔詳見Github: jieba
from jieba import analyseMAX_WORDS = 500def get_words(path): with open(path, "r") as f: content = f.read() return analyse.textrank(content,topK=MAX_WORDS,withWeight=True)
繪製詞雲
繪製詞雲的方式很多,可以直接使用第三方工具如bluemc和一些庫。這裡使用功能強大的wordcloud,因為它不僅可以繪製出漂亮的詞雲,還可以自定義詞雲的背景。
選擇一個喜愛的背景圖片,最好與展示的主題相關。這裡選擇一個戰狼2中出現比較高的武器:坦克
初始化設置wordcloud
- simsun.ttc字體(可以在網上下載喜歡的字體,並在程序中指定文件的路徑);
- backgroud_color="write": 設置詞雲背景為白色,並通過mask參數設置背景形狀;
- max_words=500: 設置詞雲中承載的片語最多為500個;
def draw_wordcloud(words): img_path = os.path.join(BASE_DIR, "zhanlang.png") font_path = os.path.join(BASE_DIR, "simsun.ttc") back_coloring = imread(img_path) wordcloud = WordCloud( font_path=font_path, background_color="white", max_words=MAX_WORDS, mask=back_coloring, max_font_size=80, random_state=42 ) wordcloud.generate_from_frequencies(dict(words)) wordcloud_img_path = os.path.join(BASE_DIR, "zhanlang_word_cloud.png") wordcloud.to_file(wordcloud_img_path)
繪製生成的詞雲如下:
源碼詳見Github:zhanlang_analyze
推薦閱讀:
※Scrapy爬圖片(一)
※未來的旅遊的熱點是什麼?旅遊點評數據分析
※從零開始寫Python爬蟲 --- 2.6 爬蟲實踐:重構排行榜小說爬蟲&Mysql資料庫
※從零開始寫Python爬蟲 --- 爬蟲實踐:螺紋鋼數據&Cookies
※開啟知乎收藏夾看圖模式