生活随笔
收集整理的這篇文章主要介紹了
哪吒票房逼近40亿,用python爬取哪吒短评分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
前言
- 暑期檔電影慘淡,但隨著哪吒爆紅開拓了新局面。這也是國產動畫的首次爆紅。在哪吒剛出,筆者以為最多10億就算不錯的了。沒想過僅過了幾天就破了10億。接著頭條又突破20億--------11天27億,勢頭增長依然很猛!又破了30億!
那筆者就很好奇人們是怎么看待這一步電影的呢?
- 哪吒?我想哪吒是陪伴過不少人成長的一部動畫片吧,也是記憶中算得上最好看的動畫片之一了。里面的哪吒、小豬熊、申公豹、石雞娘娘令人歷歷在目。我們或許都被哪吒的敢打敢為、勇敢和天真所感動!
分析
- 對于這么一部爆紅的動畫電影。我想簡單分析人們對哪吒動畫電影的評價狀況。那么就選擇貓眼票房或者豆瓣的短評爬下來分析了。
- step1:打開豆瓣主頁哪吒短評的界面。F12打開調試點擊頁面下一頁會發現有ajax數據交互。
- step2:分析這個接口,發現無加密。返回的是json套html需要解析處理一下。用網頁訪問這個接口。但是你會發現一旦你訪問頁面靠后它就拒絕訪問了。提示你要登錄再訪問。
- step3:思路很清晰了。只需要登錄—>訪問接口爬取存儲—>可視化分析即可
具體步驟
登錄
- 賬密登錄fiddler抓包發現可以直接發送請求登錄。大膽猜測沒有cookie限制。登陸后即可訪問接口!
- 程序方面只需要根據參數進行模擬即可,登錄完將cookie保存。后面的訪問都帶著這個cookie即可。
登錄部分代碼為:
import requests
import urllib
.parse
from http
import cookiejarurl
='https://accounts.douban.com/j/mobile/login/basic'
header
={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
'Referer': 'https://accounts.douban.com/passport/login_popup?login_source=anony','Origin': 'https://accounts.douban.com','content-Type':'application/x-www-form-urlencoded','x-requested-with':'XMLHttpRequest','accept':'application/json','accept-encoding':'gzip, deflate, br','accept-language':'zh-CN,zh;q=0.9','connection': 'keep-alive','Host': 'accounts.douban.com'}
data
={'ck':'','name':'','password':'','remember':'false','ticket':''
}
def login(username
,password
):global datadata
['name']=usernamedata
['password']=passworddata
=urllib
.parse
.urlencode
(data
)print(data
)req
=requests
.post
(url
,headers
=header
,data
=data
,verify
=False)cookies
= requests
.utils
.dict_from_cookiejar
(req
.cookies
)print(cookies
)return cookies
爬取與存儲
- 通過api的規則拼湊,抓下來的數據。我們主要需要評價星,和評論語句。
- 使用Beautifulsoup進行dom解析。使用xldr、xldw將數據寫入excel文件中。一個頁面20條。頁面url增加直到出現異常為止停止。
主要代碼實現:
def getcomment(cookies
):start
=0w
= xlwt
.Workbook
(encoding
='ascii')ws
= w
.add_sheet
('sheet1')index
=1while True:try:url
= 'https://movie.douban.com/subject/26794435/comments?start='+str(start
)+'&limit=20&sort=new_score&status=P&comments_only=1'start
+=20req
= requests
.get
(url
,cookies
=cookies
)res
= req
.json
()res
=res
['html']soup
= BeautifulSoup
(res
, 'lxml')node
= soup
.select
('.comment-item')for va
in node
:name
= va
.a
.get
('title')star
= va
.select_one
('.comment-info').select
('span')[1].get
('class')[0][-2]comment
= va
.select_one
('.short').text
print(name
, star
, comment
)ws
.write
(index
,0,index
)ws
.write
(index
, 1, name
)ws
.write
(index
, 2, star
)ws
.write
(index
, 3, comment
)index
+=1except Exception
as e
:print(e
)breakw
.save
('nezha.xls')
可視化分析
- 我們要對評分進行統計、詞頻統計。還有就是生成詞云展示。而對應的就是matplotlib、WordCloud庫。
評分統計:
- 對于評分統計,使用數組將上面的1,2,3,4,5,五個分數段讀取時候寫入,根據數據畫出餅狀圖分析即可。
- 從上圖也可以知道,對于評分,大部分還是分布在5分和4分的,占比分別為41.2%和33.4%.而2分和1分時非常少!這足以說明這部片絕對不是爛片或者爭議不是很大。一部片不可能滿足所有人。存在不滿意的都在三分但依然能夠接受。所以從評分分布來看哪吒還是廣受支持的!
詞頻統計:
- 根據jieba分詞。統計前面熱詞出現的次數。反應觀眾共鳴點。
- 這里感謝樓下評論給的建議,有些詞語無關性較大,我將它剔除去噪(例如這個,那個,這是等等)。
- 可以看的出國產、大圣(大圣歸來對比).這些熱門話題直戳心頭!
詞云展示:
- 相比詞頻,詞云無法看到詞語的準確數量,但是可以看的到更多詞匯、人們的評價。筆者這里通過count()類(map)對分詞結果進行詞頻統計。統計完的詞頻排序前300個詞展示在2個詞云上。這些詞語的出現頻率均大于10.所以還是有所參考價值額。
- 可以從詞云簡單分析出大家還是很滿意的,充滿濃濃封神色彩、動畫風格、不屈的爭斗、國產的激動!在票房直逼30億的情況下!我、要去看了。
代碼
import matplotlib
.pyplot
as plt
import matplotlib
import jieba
import jieba
.analyse
import xlwt
import xlrd
from wordcloud
import WordCloud
import numpy
as np
from collections
import Counter
matplotlib
.rcParams
['font.sans-serif'] = ['SimHei']
matplotlib
.rcParams
['axes.unicode_minus'] = Falsedef anylasescore(comment
):score
=[0,0,0,0,0,0]count
=0for va
in comment
:try:score
[int(va
[2])]+=1count
+=1except Exception
as e
:continueprint(score
)label
='1分','2分','3分','4分','5分'color
= 'blue', 'orange', 'yellow', 'green', 'red' size
=[0,0,0,0,0]explode
=[0,0,0,0,0]for i
in range(1,5):size
[i
]=score
[i
]*100/countexplode
[i
]=score
[i
]/count
/10pie
= plt
.pie
(size
, colors
=color
, explode
=explode
, labels
=label
, shadow
=True, autopct
='%1.1f%%')for font
in pie
[1]:font
.set_size
(8)for digit
in pie
[2]:digit
.set_size
(8)plt
.axis
('equal')plt
.title
(u
'各個評分占比', fontsize
=12)plt
.legend
(loc
=0, bbox_to_anchor
=(0.82, 1)) leg
= plt
.gca
().get_legend
()ltext
= leg
.get_texts
()plt
.setp
(ltext
, fontsize
=6)plt
.savefig
("score.png")plt
.show
()
def getzhifang(map):x
=[]y
=[]for k
,v
in map.most_common
(15):x
.append
(k
)y
.append
(v
)Xi
= np
.array
(x
)Yi
= np
.array
(y
)x
= np
.arange
(0, 15, 1)width
= 0.6plt
.rcParams
['font.sans-serif'] = ['SimHei'] plt
.figure
(figsize
=(8, 6)) plt
.bar
(Xi
, Yi
, width
, color
='blue', label
='熱門詞頻統計', alpha
=0.8,)plt
.xlabel
("詞頻")plt
.ylabel
("次數")plt
.show
()return
def getciyun_most(map):x
= []y
= []for k
, v
in map.most_common
(300):x
.append
(k
)y
.append
(v
)xi
=x
[0:150]xi
=' '.join
(xi
)print(xi
)backgroud_Image
= plt
.imread
('nezha.jpg') wc
= WordCloud
(background_color
="white",width
=1500, height
=1200,mask
=backgroud_Image
,font_path
="simhei.ttf",max_font_size
=150, random_state
=50, ) my_wordcloud
= wc
.generate
(xi
)plt
.imshow
(my_wordcloud
)my_wordcloud
.to_file
("img.jpg")xi
=' '.join
(x
[150:300])my_wordcloud
= wc
.generate
(xi
)my_wordcloud
.to_file
("img2.jpg")plt
.axis
("off")def anylaseword(comment
):list=['這個','一個','不少','起來','沒有','就是','不是','那個','還是','劇情','這樣','那樣','這種','那種','故事','人物','什么']list.append
("這個")print(list)commnetstr
=''c
= Counter
()low
=Counter
()index
=0for va
in comment
:seg_list
= jieba
.cut
(va
[3],cut_all
=False)index
+=1for x
in seg_list
:if len(x
) > 1 and x
!= '\r\n':try:c
[x
]+=1except:continuecommnetstr
+=va
[3]for (k
, v
) in c
.most_common
():if v
<5 or k
in list:c
.pop
(k
)continueprint(len(c
),c
)getzhifang
(c
)getciyun_most
(c
)
def anylase():data
= xlrd
.open_workbook
('nezha.xls') table
= data
.sheets
()[0] comment
= []for i
in range(1, 500):comment
.append
(table
.row_values
(i
))anylasescore
(comment
)anylaseword
(comment
)if __name__
== '__main__':anylase
()
結語
- 如果自己需要可以到github下載項目完整代碼。當然,只需要更改部分即可同理分析其他電影。
- 項目依然有不夠完善地方,如影評,對不同評分的平均不同處理、其他不同角度如評論用戶性別、地點等等等等,這里不做延申。
- 如果對后端、爬蟲、數據結構算法等感性趣歡迎關注我的個人公眾號交流(回復 爬蟲 即可獲得學習資料一份!):bigsai 持續輸出分享!
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的哪吒票房逼近40亿,用python爬取哪吒短评分析的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。