Python爬取貓眼電影《飛馳人生》47858萬條評論並對其進行數據分析


前言

文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。

作者: Yura不說數據說 ,PYuraL

PS:如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取

http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef

數據爬取

其實我一開始是想用豆瓣網的評論的,但是我翻了翻吧,發現“最熱評論”只能看到500條,“最新評論”只能顯示100條,拿600條數據能分析出個啥? 在這里插入圖片描述

百度了一下,看大家都是用貓眼評論,於是就……爬貓眼!網頁版的貓眼只能顯示有限的評論,切換到APP版本才能看到所有評論。

在這里插入圖片描述

找network里面的網頁也不難,隨便拿一條評論搜索一下就可以找到👇

在這里插入圖片描述

在這里插入圖片描述

關鍵是找到不同網頁之間的變化規律

在這里插入圖片描述

些網址,表面看上去,區別就是在於offset(偏移量),但是實際上更改這個數值到1005的時候就爬不到東西了(可能是由於網頁內部的設置吧),就是說這么下去我們只能得到1000條評論。

那是哪1000條評論呢?我們看到網址中有個關鍵詞“ts=1549640420581”,其實就是當前時間的意思(時間戳),轉化一下就是: 在這里插入圖片描述

所以1000條就是從這個時間點,往前偏移15條后,最新的1000條評論。

通過百度各位大神的爬蟲過程,我發現終極解決方法就是更改ts的值!如果說偏移量15的意思是從這個查詢的時間往前偏移15條再取得15條評論數據(limit=15),那么我們每次更改ts值不就可以了。

第一個ts值是程序開始運行的時間,第二個值就從已經獲取的評論數據中拿到最早的那個數據,以此不斷往前翻滾……

我爬取了2月8日24點之前的所有評論信息,按App顯示此時至少有80000+條數據,但是我爬下來總共只有4w+條…數據缺失還是比較嚴重的。

在這里插入圖片描述

數據格式如下(包括用戶id、用戶昵稱、用戶貓眼等級、性別、時間、評分、評論內容、點贊數和評論數):

在這里插入圖片描述 在這里插入圖片描述

 

這些都是在json里面,格式非常清晰明了。

在這里插入圖片描述

數據清洗

拿到數據除了做詞雲用了Python(代碼在最后),其他的內容Excel分分鍾解決,這里尤其感謝發明“數據透視表”的兄弟。

數據分析

1.觀眾信息

在這里插入圖片描述

男女比例各占一半,男的對賽車這類刺激性東西感興趣可以理解,這女觀眾都是為了啥?為了黃景瑜小哥哥的臉?還是像我一樣沖着阿信來的?這里信息太少,我只做少量胡思亂猜。 在這里插入圖片描述

用戶等級又是類似於正態分布的形狀,巧的嘞……其中0分和1分的用戶(可以認定為新注冊用戶)僅占9.78%,可以看出評分的人中水軍是很少的,基本都是貓眼老用戶。

再看看4天用戶評價數量的變化:

在這里插入圖片描述

基本可得這部電影熱度呈現緩慢下降的趨勢(但是由於數據的不完整性,不能絕對說明)

那用戶都喜歡在什么時間評論呢?對比看四天的評論hour數據:

在這里插入圖片描述

如果大家習慣看完電影馬上評價的話,那么從評論趨勢來看,從中午12點之后評論數逐漸增加,推測是由於早上10點左右那場電影的結束。隨后評論數不斷增加,在晚飯前的5、6點和睡覺前的23點左右達到小高峰。

嗯,非常符合大家“醒了看電影,看完吃飯,吃了再看,看了再睡‘的“節假日生活作息”。

2.評分情況

在這里插入圖片描述

按照我爬取的數據我們看到超過一半(52.37%)的觀眾給這部電影打了滿分10分,極少量用戶評分在6分以下(僅占7.58%)。根據我爬取的數據,計算所得平均分是8.725,和實時顯示的分數8.8相差不大。

在這里插入圖片描述

除了從宏觀角度看評分,我們來瞧瞧評論者性別和評論時間與最終評分有什么不能說的秘密?

在這里插入圖片描述

性別的不同並沒有造成評分很大的區別,男觀眾和女觀眾的評分平均分僅僅相差0.35分,“未知性別”人群的評分在兩者之間,基本等於男性評分8.53和女性評分8.88的的平均值(8.71)。嗯,我很有理由懷疑“未知人群”中男女比例也各占一半!

在這里插入圖片描述

從評分時間和評分的關系來看,低分一般出現在0點到7點之間,我猜吧,大概是在這種夜深人靜的時候,大家的情緒容易有大起大落,白天看完電影時的興奮已經退去,留下的只有深深的思考,或許還帶點批判性,吧。

3.評論內容

先看看點贊數最高的5條評論。

在這里插入圖片描述

我們發現前5條評論評分均為10分:其中第一條,emmm,與電影無關,暫時跳過……其他幾條都是贊美韓寒、沈騰和黃景瑜的。

那通過詞雲具體看一下評論內容:

在這里插入圖片描述

不成熟的代碼

 1 from bs4 import BeautifulSoup
 2 import requests
 3 import warnings
 4 import re
 5 from datetime import datetime
 6 import json
 7 import random
 8 import time
 9 import datetime
10 11 headers = {
12     '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',
13     'Connection':'keep-alive'}
14 cookies={'cookie':'_lxsdk_cuid=168c325f322c8-0156d0257eb33d-10326653-13c680-168c325f323c8; uuid_n_v=v1; iuuid=30E9F9E02A1911E9947B6716B6E91453A6754AA9248F40F39FBA1FD0A2AD9B42; webp=true; ci=191%2C%E5%8F%B0%E5%B7%9E; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; __mta=49658649.1549462270794.1549465778684.1549548206227.3; _lxsdk=30E9F9E02A1911E9947B6716B6E91453A6754AA9248F40F39FBA1FD0A2AD9B42; _lxsdk_s=168c898414e-035-f0e-e6%7C%7C463'}
15 16 #url設置offset偏移量為0
17 url = 'http://m.maoyan.com/review/v2/comments.json?movieId=1218091&userId=-1&offset=0&limit=15&ts={}&type=3'
18 19 comment=[]
20 nick=[]
21 score=[]
22 comment_time=[]
23 gender=[]
24 userlevel=[]
25 userid=[]
26 upcount=[]
27 replycount=[]
28 ji=1
29 30 31 url_time=url_time=int(time.time())*1000#獲取當前時間(單位是毫秒,所以要✖️1000)
32 33 for i in range(2000):
34     value=15*i
35     url_range=url.format(url_time)
36     res=requests.get(url_range,headers=headers,cookies=cookies,timeout=10)
37     res.encoding='utf-8'
38     print('正在爬取第'+str(ji)+'')
39     content=json.loads(res.text,encoding='utf-8')
40     list_=content['data']['comments']
41     count=0
42     for item in list_:
43         comment.append(item['content'])
44         nick.append(item['nick'])
45         score.append(item['score'])    
46         comment_time.append(datetime.datetime.fromtimestamp(int(item['time']/1000)))
47         gender.append(item['gender'])
48         userlevel.append(item['userLevel'])
49         userid.append(item['userId'])
50         upcount.append(item['upCount'])
51         replycount.append(item['replyCount'])
52         count=count+1
53         if count==15:
54             url_time=item['time']
55     ji+=1
56     time.sleep(random.random())
57 print('爬取完成')
58 print(url_time)
59 result={'用戶id':userid,'用戶昵稱':nick,'用戶等級':userlevel,'性別':gender,'時間':comment_time,'評分':score,'評論內容':comment,'點贊':upcount,'評論':replycount}
60 results=pd.DataFrame(result)
61 results.info()
62 results.to_excel('貓眼_飛馳人生.xlsx')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM