
前言
最近,最火的電視劇莫過于《大秦賦了》,自12月1日開播后,收獲了不錯的口碑。然而隨著電視劇的跟新,該劇在網(wǎng)上引起了激烈的討論,不僅口碑急劇下滑,頗有高開低走的趨勢,同時該劇的評分也由最初的8.9分,下降到了現(xiàn)在的6.5分。雖然我還沒有看過這個新劇,但是對于小伙伴們討論的內(nèi)容,卻頗有興趣(主要還是大家老是討論這個劇)。因此,我用Python爬取了《大秦賦》的相關(guān)數(shù)據(jù),進(jìn)行了一波分析。數(shù)據(jù)爬取
巧婦難為無米之炊,做數(shù)據(jù)分析之前最重要的就是“數(shù)據(jù)獲取”。于是,我準(zhǔn)備用Python爬取豆瓣上的短評數(shù)據(jù)以及一些評論時間信息、評價(jià)星級信息。關(guān)于數(shù)據(jù)的爬取主要說以下幾個內(nèi)容:第一頁:
https://movie.douban.com/subject/26413293/comments?status=P
第二頁:
https://movie.douban.com/subject/26413293/comments?start=20&limit=20&status=P&sort=new_score
第三頁:
https://movie.douban.com/subject/26413293/comments?start=40&limit=20&status=P&sort=new_score
上面我們分別展示了第1-3頁的頁面鏈接,我們主要是觀察其中的規(guī)律,其中start是獲取評論的起始位置,limit代表獲取多少條評論數(shù)據(jù)。觀察結(jié)果:3個鏈接的不同在于這個start的不同,在后續(xù)翻頁時,我們只需要修改start參數(shù)即可。對于豆瓣的爬取,其實(shí)找到真實(shí)的短評鏈接,是極其容易的。但是這里有一點(diǎn)我必須說明,你可以不登陸爬取數(shù)據(jù),但是只能是操作一段時間,過一段時間,會檢測到你是爬蟲。因此,你一定要登陸后,攜帶cookie去進(jìn)行數(shù)據(jù)的爬取。如果你有時候不知道請求頭中,該放一些什么,那么就請都加上,等有空再慢慢總結(jié)。?headers?=?{
????"Accept":"application/json,?text/plain,?*/*",
????"Accept-Language":"zh-CN,zh;q=0.9",
????"Connection":"keep-alive",
????"Host":"movie.douban.com",
????"User-Agent":'Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/87.0.4280.88?Safari/537.36',
????"Cookie":'這里是你自己的cookie'
????}
cookie有些人可能又不知道在哪里,還是告訴你一下吧!好多參數(shù)都在下面呢,如果你想學(xué)好爬蟲,那么這些參數(shù)代表什么,你總應(yīng)該需要知道吧。最終再補(bǔ)充一點(diǎn):我本來打算把豆瓣上的《大秦賦》短評,全部爬下來作為分析的素材。然而并沒有成功爬取到所有的短評,一波三折,最終只爬到了500條,當(dāng)然我覺得這也是豆瓣的一種反扒措施,最大可見短評數(shù)就500條,多的不給你看。(有大神的話,可以下去研究一下)數(shù)據(jù)處理
爬取后的數(shù)據(jù),再怎么規(guī)整,也和用于分析的數(shù)據(jù)之間,有一定的差距。因此再分析之前,一定的“數(shù)據(jù)清洗”是很有必要的。在數(shù)據(jù)清洗之前,我們簡單看看數(shù)據(jù)是什么樣子的。df?=?pd.read_csv("final_all_comment.csv",index_col=0)
df.head(10)

其實(shí)數(shù)據(jù)還是挺漂亮的,但是我們還是需要做如下處理:我們認(rèn)為:如果'評論時間'和'評論內(nèi)容'完全一致的話,就認(rèn)為他是同一條評論,需要將其剔除。print("刪除之前的記錄數(shù):",df.shape)
df.drop_duplicates(subset=['評論時間','評論內(nèi)容'],inplace=True,keep='first')
print("刪除之前的記錄數(shù):",df.shape)
因?yàn)椤洞笄刭x》是2020年12月1號開播的,現(xiàn)在是12月16號晚,因此所有的評論數(shù)據(jù)肯定都是2020年12月開始有的,因此我們只保留有用的“日期”數(shù)據(jù)(哪一天)。而對于時分秒來說,我們只保留“小時”數(shù)據(jù)。df["評論天數(shù)"]?=?df["評論時間"].str[8:-9].astype(int)
df["小時"]?=?df["評論時間"].str[11:-6].astype(int)
觀察原頁面的評論星級,可以看到所有的星級并不是以數(shù)字展示的,而是用星星進(jìn)行前端渲染出來的,但是頁面的源代碼,卻展示的是星級數(shù)。對應(yīng)到頁面源代碼中,我們看看又是怎么樣子的呢?可以看到:3星的數(shù)字是30,其它的以此類推,1星的數(shù)字是10,2星的數(shù)字是20......我看著就是很不爽,因此我在爬取數(shù)據(jù)的時候,已經(jīng)將這些數(shù)字,全都除以10后計(jì)算。對于一條評論來說,有些人可能手誤,或者湊字?jǐn)?shù),會出現(xiàn)將某個字或者詞語,重復(fù)說多次,因此在進(jìn)行分詞之前,需要做“機(jī)械壓縮去重”操作。下面是我很早之前寫的一段代碼,大家可以去看我的CSDN博客,里面有很好的解釋。def?func(st):
????for?i?in?range(1,int(len(st)/2)+1):
????????for?j?in?range(len(st)):
????????????if?st[j:j+i]?==?st[j+i:j+2*i]:
????????????????k?=?j?+?i
????????????????while?st[k:k+i]?==?st[k+i:k+2*i]?and?k????????????????????k?=?k?+?i
????????????????st?=?st[:j]?+?st[k:]????
????return?st
????
st?=?"我愛你我愛你我愛你好你好你好哈哈哈哈哈"
func(st)
利用上述函數(shù),我們可以對爬取到的數(shù)據(jù),應(yīng)用此操作。def?func(st):
????for?i?in?range(1,int(len(st)/2)+1):
????????for?j?in?range(len(st)):
????????????if?st[j:j+i]?==?st[j+i:j+2*i]:
????????????????k?=?j?+?i
????????????????while?st[k:k+i]?==?st[k+i:k+2*i]?and?k????????????????????k?=?k?+?i
????????????????st?=?st[:j]?+?st[k:]????
????return?st
df["評論內(nèi)容"]?=?df["評論內(nèi)容"].apply(func)
數(shù)據(jù)可視化操作
俗話說:“字不如表,表不如圖”。爬取到的數(shù)據(jù),最終做可視化的呈現(xiàn),才能夠讓大家對數(shù)據(jù)背后的規(guī)律,有一個清晰的認(rèn)識。下面我們從以下幾個方面來進(jìn)行數(shù)據(jù)可視化分析。- 二十四小時內(nèi)的評論數(shù)的變化趨勢
關(guān)于數(shù)據(jù)可視化工具,我就不用pyecharts了,我還是回歸原始,用最原始的matplotlib庫進(jìn)行數(shù)據(jù)可視化的展示。畢竟我們沒有什么復(fù)雜的展示,代碼越簡短越好。從圖中可以看出:短評數(shù)量在12月4日之前,一直處于上升趨勢,在12月4日達(dá)到頂峰。和文章最開始的說明一致,前面幾天觀眾對于該劇的期待值較高,但是在12月4日后,突然出現(xiàn)斷崖式下降,說明隨著該劇的更新,大家有所失望了。2)二十四小時內(nèi)的評論數(shù)的變化趨勢最近總聽到周圍有人在討論這部劇,下面就來看看大家都是在啥時候追劇呢?從24小時圖中可以看出:晚上7-24點(diǎn),評論急劇上升,大多數(shù)人都是6點(diǎn)下班,可能吃個飯到7點(diǎn)左右,或者直接在下班過程中,就開始了一天的追劇。這里還有一波早高峰5-8點(diǎn),難道睡不著?早上還要起來刷刷據(jù),然后上班。這里還有兩個時間段:上午10-11點(diǎn),中午12-15點(diǎn),肯定有相當(dāng)一部分小伙伴,正在摸魚工作呀?
劇究竟好不好,看看觀眾的評分少不了,這也是觀眾最直觀的想法。從下圖中可以看出:大家對于該劇的評價(jià)還是很低的,1星和2星基本占據(jù)了整個餅圖,也就是說該劇并沒有得到大家的認(rèn)可。其實(shí)大家對于該劇最大的爭論點(diǎn),還是由張魯一飾演的嬴政。40歲的張魯一,竟然飾演13歲的少年嬴政,然后向36歲朱珠飾演的趙姬分享喜訊,這個角色顯色很不協(xié)調(diào)。很多人調(diào)侃:難道請不起小演員嗎?還有一部分人,對該劇的劇情和臺詞一頓吐槽,嬴政稱如果呂不韋是自己的生父,愿意跟他一起離開秦國浪跡天涯,這真的是少年老成的嬴政能說出來的話嗎?《大秦賦》是“大秦帝國”系列的第四部,原名為《大秦帝國之天下》,播出時改為了《大秦賦》。于是很多人將這部劇和2009年播出的《大秦帝國》作比較,以此來諷刺該劇。好了,今天的分享就到此為止。如果你有更多的時間,更多的分析思路,可以下去拓展哦!
來自FLAG巨頭開發(fā)者、技術(shù)、創(chuàng)投一手消息

點(diǎn)擊下方閱讀原文加入社區(qū)會員