資料分析 | 看過復聯 4 的人都在談什麼
週末了,寫一點好玩的。復聯 4 本週開始上映,並一直維持非常高的熱度。那麼哪些電影使用者都在談什麼呢?本文就從 0 到 1 討論一下如何通過抓取豆瓣的短評來進行一下簡單的資料分析。由於豆瓣的限制,資料量並不是很大,但是分析方法都是相通的。
1. 資料抓取
資料抓取可以檢視豆瓣 web 頁面的審查元素檢視到的前端的原始資料是什麼樣的?(Safari: 右鍵 -> 檢查元素;Crome: 右鍵 -> 檢查)如下圖:
然後將結果進行解析抓取對應的元素,這個寫過爬蟲的同學都瞭解,不細說。本文采用了另外一種較簡單的方式來抓取資料:douban api。抓取豆瓣短評的 api 如下:
-
url:https://api.douban.com/v2/movie/subject/:id/comments,其中 id 為電影 id,可以在電影的頁面看到
-
引數說明:
-
apikey
:開發者 api key,需要申請 -
count
:返回數量 -
start
:開始序號
2. 分詞
中文分詞我第一個想到的是樑博的 pullword,但是使用過程中並不理想。並不是說 pullword 做的不好,畢竟 pullword 也是有很多人使用的,可能是不太適合我的資料。我最後使用的分詞工具是 jieba。jieba 支援 python 2 和 python 3。使用起來也是非常的簡單,第一步安裝:
easy_install jieba / pip install jieba / pip3 install jieba
示例程式碼
# encoding=utf-8
import jieba
seg_list = jieba.cut("我來到北京清華大學", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我來到北京清華大學", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精確模式
seg_list = jieba.cut("他來到了網易杭研大廈") # 預設是精確模式
print(", ".join(seg_list))
seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造") # 搜尋引擎模式
print(", ".join(seg_list))
更詳細的資訊可以參考 jieba 主頁:https://github.com/fxsjy/jieba
3. 完整程式碼
綜合第一步和第二步我們使用 python 2 編寫完整程式碼如下,非常簡單。
#coding:utf-8
import urllib2
import jieba
start = 1
words = {}
f = open("comment", "w")
while start < 600:
url = "https://api.douban.com/v2/movie/subject/26100958/comments?start={0}&count={1}&apikey=your_own_api_key".format(start,20)
data = urllib2.urlopen(url, timeout=5)
j = json.load(data)
for comment in j["comments"]:
f.write(comment["content"].encode("utf8"))
word_list = jieba.cut(comment["content"].replace('\n','').encode("utf8"))
for word in word_list:
word = word.strip()
if words.get(word):
words[word] = words[word] + 1
else:
words[word] = 1
start = start + 20
f.close()
sorted_words = sorted(words.items(), key=lambda d: d[1], reverse=True)
for item in sorted_words:
print item[0].encode("utf8"), item[1]
4. 形式化展示
第三部的結果出來之後就可以考慮通過圖表形式化展示出來了,一種比較合適的方式是使用詞雲。我這裡使用是易詞雲,結果如下。
光是看著詞雲就忍不住要去電影院了,不說了,我先去下單了。
最後關於程式碼的使用問題,歡迎後臺留言。