程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Da Qin Fu has been on fire recently!So I scraped the relevant data with Python and discovered the secrets...

編輯:Python


前言

最近,最火的電視劇莫過於《大秦賦了》,自12月1日開播後,收獲了不錯的口碑.然而隨著電視劇的跟新,該劇在網上引起了激烈的討論,不僅口碑急劇下滑,頗有高開低走的趨勢,同時該劇的評分也由最初的8.9分,下降到了現在的6.5分.


雖然我還沒有看過這個新劇,但是對於小伙伴們討論的內容,卻頗有興趣(主要還是大家老是討論這個劇).因此,我用Python爬取了《大秦賦》的相關數據,進行了一波分析.

代碼及數據獲取

本文完整代碼和數據,大家關注公眾號:數據分析與統計學之美,回復:大秦賦,獲取!

數據爬取

巧婦難為無米之炊,做數據分析之前最重要的就是“數據獲取”.於是,我准備用Python爬取豆瓣上的短評數據以及一些評論時間信息、評價星級信息.


關於數據的爬取主要說以下幾個內容:

1)關於翻頁操作
第一頁:

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.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

上面我們分別展示了第1-3頁的頁面鏈接,我們主要是觀察其中的規律,其中start是獲取評論的起始位置,limit代表獲取多少條評論數據.觀察結果:3個鏈接的不同在於這個start的不同,在後續翻頁時,我們只需要修改start參數即可.

2)關於反扒說明

對於豆瓣的爬取,其實找到真實的短評鏈接,是極其容易的.但是這裡有一點我必須說明,你可以不登陸爬取數據,但是只能是操作一段時間,過一段時間,會檢測到你是爬蟲.因此,你一定要登陸後,攜帶cookie去進行數據的爬取.如果你有時候不知道請求頭中,該放一些什麼,那麼就請都加上,等有空再慢慢總結.

= {

"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'
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

cookie有些人可能又不知道在哪裡,還是告訴你一下吧!好多參數都在下面呢,如果你想學好爬蟲,那麼這些參數代表什麼,你總應該需要知道吧.


最終再補充一點:我本來打算把豆瓣上的《大秦賦》短評,全部爬下來作為分析的素材.然而並沒有成功爬取到所有的短評,一波三折,最終只爬到了500條,當然我覺得這也是豆瓣的一種反扒措施,最大可見短評數就500條,多的不給你看.(有大神的話,可以下去研究一下)

數據處理

爬取後的數據,再怎麼規整,也和用於分析的數據之間,有一定的差距.因此再分析之前,一定的數據清洗是很有必要的.在數據清洗之前,我們簡單看看數據是什麼樣子的.

df
=
pd.
read_csv(
"final_all_comment.csv",
index_col
=
0)

df. head( 10)
  • 1.
  • 2.

結果如下:


其實數據還是挺漂亮的,但是我們還是需要做如下處理:

1)剔除重復值

我們認為:如果’評論時間’和’評論內容’完全一致的話,就認為他是同一條評論,需要將其剔除.

print(
"刪除之前的記錄數:",
df.
shape)

df. drop_duplicates( subset =[ '評論時間', '評論內容'], inplace = True, keep = 'first')
print( "刪除之前的記錄數:", df. shape)
  • 1.
  • 2.
  • 3.
2)評論時間處理

因為《大秦賦》是2020年12月1號開播的,現在是12月16號晚,因此所有的評論數據肯定都是2020年12月開始有的,因此我們只保留有用的“日期”數據(哪一天).而對於時分秒來說,我們只保留“小時”數據.

df[
"評論天數"]
=
df[
"評論時間"].
str[
8:
-
9].
astype(
int)

df[ "小時"] = df[ "評論時間"]. str[ 11: - 6]. astype( int)
  • 1.
  • 2.
3)評論星級說明

觀察原頁面的評論星級,可以看到所有的星級並不是以數字展示的,而是用星星進行前端渲染出來的,但是頁面的源代碼,卻展示的是星級數.


對應到頁面源代碼中,我們看看又是怎麼樣子的呢?


可以看到:3星的數字是30,其它的以此類推,1星的數字是10,2星的數字是20…我看著就是很不爽,因此我在爬取數據的時候,已經將這些數字,全都除以10後計算.

4)評論內容機械壓縮去重

對於一條評論來說,有些人可能手誤,或者湊字數,會出現將某個字或者詞語,重復說多次,因此在進行分詞之前,需要做“機械壓縮去重”操作.下面是我很早之前寫的一段代碼,大家可以去看我的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 < len( st):
k = k + i
st = st[: j] + st[ k:]
return st

st = "我愛你我愛你我愛你好你好你好哈哈哈哈哈"
func( st)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

結果如下:


利用上述函數,我們可以對爬取到的數據,應用此操作.

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 < len( st):
k = k + i
st = st[: j] + st[ k:]
return st

df[ "評論內容"] = df[ "評論內容"]. apply( func)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

數據可視化操作

俗話說:“字不如表,表不如圖”.爬取到的數據,最終做可視化的呈現,才能夠讓大家對數據背後的規律,有一個清晰的認識.下面我們從以下幾個方面來進行數據可視化分析.

  1. 評論數隨時間的變化趨勢
  2. 二十四小時內的評論數的變化趨勢
  3. 星級評分的餅圖
  4. 大家主要都在評論一些啥

關於數據可視化工具,我就不用pyecharts了,我還是回歸原始,用最原始的matplotlib庫進行數據可視化的展示.畢竟我們沒有什麼復雜的展示,代碼越簡短越好.

1)評論數隨時間的變化趨勢

從圖中可以看出:短評數量在12月4日之前,一直處於上升趨勢,在12月4日達到頂峰.和文章最開始的說明一致,前面幾天觀眾對於該劇的期待值較高,但是在12月4日後,突然出現斷崖式下降,說明隨著該劇的更新,大家有所失望了.

2)二十四小時內的評論數的變化趨勢

最近總聽到周圍有人在討論這部劇,下面就來看看大家都是在啥時候追劇呢?從24小時圖中可以看出:晚上7-24點,評論急劇上升,大多數人都是6點下班,可能吃個飯到7點左右,或者直接在下班過程中,就開始了一天的追劇.這裡還有一波早高峰5-8點,難道睡不著?早上還要起來刷刷據,然後上班.這裡還有兩個時間段:上午10-11點,中午12-15點,大家可以分析下,肯定有相當一部分小伙伴,正在摸魚工作呀🤭

3)星級評分的餅圖

劇究竟好不好,看看觀眾的評分少不了,這也是觀眾最直觀的想法.

  • 1星:很差
  • 2星:較差
  • 3星:還行
  • 4星:推薦
  • 1星:力薦

從下圖中可以看出:大家對於該劇的哦=評價還是很低的,1星和2星基本占據了整個餅圖,也就是說該劇並沒有得到大家的認可.

4)大家主要都在評論一些啥

其實大家對於該劇最大的爭論點,還是由張魯一飾演的嬴政.40歲的張魯一,竟然飾演13歲的少年嬴政,然後向36歲朱珠飾演的趙姬分享喜訊,這個角色顯色很不協調.很多人支護:難道請不起小演員嗎?

還有一部分人,對該劇的劇情和台詞很是吐槽,嬴政稱如果呂不韋是自己的生父,願意跟他一起離開秦國浪跡天涯,這真的是少年老成的嬴政能說出來的話嗎?

《大秦賦》是“大秦帝國”系列的第四部,原名為《大秦帝國之天下》,播出時改為了《大秦賦》.於是很多人將這部劇和2009年播出的《大秦帝國》作比較,以此來諷刺該劇.


好了,今天的分享就到此為止.如果你有更多的時間,更多的分析思路,可以下去拓展哦!



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved