11月官脓,由湯姆·哈迪主演的“毒液:致命守護(hù)者”在國(guó)內(nèi)上映,依托漫威的光環(huán)以及演員們精湛的演技涝焙,這部動(dòng)作科幻片在貓眼評(píng)分得到豆瓣7.4的評(píng)分卑笨,口碑和票房都高于大多數(shù)同期上映的其他影片。
所以周日的時(shí)候跟基友去電影院去看了這場(chǎng)正邪共生的電影仑撞,100多人的影院座無虛席赤兴,不過看完之后對(duì)比其他漫威作品,我倒也沒覺得有多大的驚喜隧哮,覺得貓眼上的9.3評(píng)分的感受不符桶良。
頭部的幾條評(píng)論顯然有些夸大,那大眾對(duì)“毒液”感受是怎么呢沮翔?于是筆者動(dòng)手開始分析起來陨帆。
獲取數(shù)據(jù)
首先要獲取數(shù)據(jù),準(zhǔn)備爬取貓眼上的電影評(píng)論作為本次分析樣本鉴竭,PC官網(wǎng)上只顯示了電影的10條熱門短評(píng)歧譬,顯然不夠岸浑,于是準(zhǔn)備從M端抓包找到評(píng)論接口搏存。
接口鏈接:
http://m.maoyan.com/mmdb/comments/movie/42964.json?v=yes&offset=15&startTime=2018-11-20%2019%3A17%3A16。
接口中對(duì)我們本次抓取主要有用的參數(shù)是offset偏移量以及日期矢洲,這兩個(gè)條件限制了抓取的條數(shù)璧眠。分析接口結(jié)果:
這里有用戶評(píng)論的相關(guān)數(shù)據(jù),我們選取了地理位置(用戶為授權(quán)無法獲取)责静、評(píng)論內(nèi)容袁滥、用戶名、評(píng)分以及評(píng)論時(shí)間的數(shù)據(jù)灾螃,通過python的requests模塊開始爬取题翻。導(dǎo)入本次爬取需要的包,開始抓取數(shù)據(jù)腰鬼。
`defget_data(url):
headers?=?{
'User-Agent':'Mozilla/5.0?(iPhone;?CPU?iPhone?OS?11_0?like?Mac?OS?X)?AppleWebKit/604.1.38?(KHTML,?like?Gecko)?Version/11.0?Mobile/15A372?Safari/604.1'}
html?=?requests.get(url,?headers=headers)
ifhtml.status_code?==200:
returnhtml.content
else:
returnnone`
其次是解析Json數(shù)據(jù)嵌赠,每個(gè)接口有15條評(píng)論數(shù)據(jù),10條熱門評(píng)論數(shù)據(jù)熄赡,我們將評(píng)論數(shù)據(jù)中用戶名姜挺、城市名、評(píng)論內(nèi)容彼硫、評(píng)分炊豪、評(píng)論時(shí)間依次解析出來,并返回拧篮。
`defparse_data(html):
json_data?=?json.loads(html)['cmts']
comments?=?[]
try:
foriteminjson_data:
comment?=?{
'nickName':?item['nickName'],
'cityName':?item['cityName']if'cityName'initemelse'',
'content':?item['content'].strip().replace('
',''),
'score':?item['score'],
'startTime':?item['startTime']
}
comments.append(comment)
returncomments
exceptExceptionase:
print(e)`
接著我們將獲取到的數(shù)據(jù)保存到本地词渤。此過程中,對(duì)接口url中時(shí)間的處理借鑒了其他博主的爬蟲思路串绩,將每次爬取的15條數(shù)據(jù)取最后一條的評(píng)論時(shí)間掖肋,減去一秒(防止重復(fù)),從該時(shí)間向前獲取直到影片上映時(shí)間赏参,獲取所有數(shù)據(jù)志笼。
`defsave():
start_time?=?datetime.now().strftime('%Y-%m-%d?%H:%M:%S')
end_time?='2018-11-09?00:00:00'
whilestart_time?>?end_time:
url?='http://m.maoyan.com/mmdb/comments/movie/42964.json?_v_=yes&offset=15&startTime='+?start_time.replace(
'?','%20')
html?=None
try:
html?=?get_data(url)
exceptExceptionase:
time.sleep(0.5)
html?=?get_data(url)
else:
time.sleep(0.1)
comments?=parse_data(html)
start_time?=?comments[14]['startTime']
print(start_time)
start_time?=?datetime.strptime(start_time,'%Y-%m-%d?%H:%M:%S')?+?timedelta(seconds=-1)
start_time?=?datetime.strftime(start_time,'%Y-%m-%d?%H:%M:%S')
foritemincomments:
print(item)
withopen('files/comments.txt','a',?encoding='utf-8')asf:
f.write(item['nickName']+','+item['cityName']?+','+item['content']+','+str(item['score'])+?item['startTime']?+'
')
if__name__?=='__main__':
url?='http://m.maoyan.com/mmdb/comments/movie/42964.json?_v_=yes&offset=15&startTime=2018-11-19%2019%3A36%3A43'
html?=?get_data(url)
reusults?=?parse_data(html)
save()`
最終抓取了48048條評(píng)論相關(guān)數(shù)據(jù)作為此次分析樣本。?
數(shù)據(jù)可視化
數(shù)據(jù)可視化采用了pyecharts把篓,按照地理位置制作了毒液觀眾群的分布圖纫溃。部分代碼如下:
`geo?=?Geo('《毒液》觀眾位置分布','數(shù)據(jù)來源:貓眼-Ryan采集',?**style.init_style)
attr,value=?geo.cast(data)
geo.add('',?attr,value,?visual_range=[0,1000],
visual_text_color='#fff',?symbol_size=15,
is_visualmap=True,?is_piecewise=False,?visual_split_number=10)
geo.render('觀眾位置分布-地理坐標(biāo)圖.html')
data_top20?=?Counter(cities).most_common(20)
bar?=?Bar('《毒液》觀眾來源排行TOP20','數(shù)據(jù)來源:貓眼-Ryan采集',?title_pos='center',?width=1200,?height=600)
attr,value=?bar.cast(data_top20)
bar.add('',?attr,value,?is_visualmap=True,?visual_range=[0,3500],?visual_text_color='#fff',?is_more_utils=True,
is_label_show=True)
bar.render('觀眾來源排行-柱狀圖.html')`
從可視化結(jié)果來看,“毒液”觀影人群以東部城市為主韧掩,觀影的top5城市為深圳紊浩、北京、上海疗锐、廣州坊谁、成都。?
觀眾地理位置分布圖
觀眾來源排行TOP20
用戶評(píng)論滑臊,詞云圖
只看觀眾分布無法判斷大家對(duì)電影的喜好口芍,所以我把通過jieba把評(píng)論分詞,最后通過wordcloud制作詞云雇卷,作為大眾對(duì)該電影的綜合評(píng)價(jià)鬓椭。
`?comments?=?[]
withopen('files/comments.txt','r',?encoding='utf-8')asf:
rows
=?f.readlines()
try:
forrowinrows:
comment?=?row.split(',')[2]
ifcomment?!='':
comments.append(comment)
#?print(city)
except?Exceptionase:
print(e)
comment_after_split?=?jieba.cut(str(comments),?cut_all=False)
words?='?'.join(comment_after_split)
#多慮沒用的停止詞
stopwords?=?STOPWORDS.copy()
stopwords.add('電影')
stopwords.add('一部')
stopwords.add('一個(gè)')
stopwords.add('沒有')
stopwords.add('什么')
stopwords.add('有點(diǎn)')
stopwords.add('感覺')
stopwords.add('毒液')
stopwords.add('就是')
stopwords.add('覺得')
bg_image?=?plt.imread('venmo1.jpg')
wc?=?WordCloud(width=1024,?height=768,?background_color='white',?mask=bg_image,?font_path='STKAITI.TTF',
stopwords=stopwords,?max_font_size=400,?random_state=50)
wc.generate_from_text(words)
plt.imshow(wc)
plt.axis('off')
plt.show()
`
從最終的詞云結(jié)果上來看颠猴,大多數(shù)觀眾還是對(duì)“毒液”很滿意的。
想了解更多前沿技術(shù)小染,想獲取最新免費(fèi)編程資源視頻源碼筆記翘瓮,小伙伴請(qǐng)往下看!
qun號(hào)是:八六四裤翩,六三四资盅,八四五。qun內(nèi)有很多開發(fā)工具踊赠,很多干貨和技術(shù)資料分享律姨!
如果您覺得此篇文章對(duì)您有幫助,歡迎關(guān)注微信公眾號(hào):大禹編程臼疫,您的支持是對(duì)我最大的鼓勵(lì)择份!共同學(xué)習(xí),共同進(jìn)步