歡迎光臨
每天分享高質量文章

豆瓣已玩爛,爬點洋氣的:用IMDB資料為你“訂製”經典好片

導讀:轉戰Python半年,接觸爬蟲2個月,期間讀了10本相關書籍,完成此作,算是對過去學習、實踐的一次回顧。也希望與更多的Python,爬蟲愛好者小夥伴們一起交流、成長。

選此題目,一來豆瓣作為爬蟲入門,各種大牛的深入分析已趨於完美;另一方面隨著中國電影工業的發展,我們需要將視角轉向國際市場,透過資料分析,瞭解一下外國人比較感興趣的電影。

 

 

作者:翻滾吧羊寶寶,微訊號:LiuYannis

來源:資料森麟(ID:shujusenlin)

 

 

01 資料爬取

 

1. 網頁分析

 

  • IMDB top250主頁

  • IMDB電影詳情頁(1)

  • IMDB 電影詳情頁(2)

基於以上網頁構造,我們發現只需得到每個電影的詳情頁編碼(唯一),透過2次“蛙跳”,實現詳情頁(1)(2)匯出國家&型別,分數&人數的資訊的獲取。便於理解,爬取思維導圖如下:

 

2. 爬蟲程式碼

 

  • IMDB top250主頁
 

#匯入庫-------------------------------------------
from urllib import request
from chardet import detect
from bs4 import BeautifulSoup
import pandas as pd
import time
import random

#獲取網頁原始碼,生成soup物件-------------------------
def getSoup(url):
    with request.urlopen(url) as fp:
       byt = fp.read()
       det = detect(byt)
       time.sleep(random.randrange(1,5))
       return BeautifulSoup(byt.decode(det['encoding']),'lxml')
   
#解析資料-------------------------------------------  
def getData(soup):
   #獲取評分
   ol = soup.find('tbody', attrs = {'class': 'lister-list'})
   score_info = ol.find_all('td',attrs={'class':'imdbRating'})
   film_scores = [k.text.replace('\n','') for k in score_info]
   #獲取評分、電影名、導演・演員、上映年份、詳情網頁連結
   film_info = ol.find_all('td',attrs={'class':'titleColumn'})
   film_names =  [k.find('a').text for k in film_info]
   film_actors =  [k.find('a').attrs['title'] for k in film_info]
   film_years = [k.find('span').text[1:5] for k in film_info]
   next_nurl =  [url2 + k.find('a').attrs['href'][0:17]  for k in film_info]
   data=pd.DataFrame({'name':film_names,'year':film_years,'score':film_scores,'actors':film_actors,'newurl':next_nurl})      
    return data    

 

  • IMDB top250電影詳情頁

 

#獲取詳情頁資料-------------------------------------------
def nextUrl(detail,detail1):
  #獲取電影國家
  detail_list = detail.find('div',attrs={'id':'titleDetails'}).find_all('div',attrs={'class':'txt-block'})
   detail_str = [k.text.replace('\n','') for k in detail_list]
  detail_str = [k for k in detail_str if k.find(':')>=0]
  detail_dict = {k.split(':')[0] : k.split(':')[1] for k in detail_str}
  country = detail_dict['Country']    
  #獲取電影型別
  detail_list1 = detail.find('div',attrs={'class':'title_wrapper'}).find_all('div',attrs={'class':'subtext'})
   detail_str1 = [k.find('a').text for k in detail_list1]
  movie_type=pd.DataFrame({'Type':detail_str1})
  #獲取以組劃分的電影詳細評分、人數
  div_list = detail1.find_all('td',attrs= {'align': 'center'}) 
  value = [k.find('div',attrs= {'class': 'bigcell'}).text.strip() for k in div_list]
   num   = [k.find('div', attrs={'class': 'smallcell'}).text.strip() for k in div_list]
   scores=pd.DataFrame({'value':value,'num':num})  
  return country,movie_type,scores

 

  • 3. 資料展示

最終我們得到瞭如下資料,並將其進行儲存用於後續的分析:

 

 

02 資料分析

 

1. 影片型別對比

 

首先來看一下各個型別的影片佔比:

Top250電影的型別佔比,前三名分別是喜劇、犯罪與動作。

緊張刺激的情緒、張弛有度的情節,最能帶給影迷帶來記憶深刻的觀影體驗。

下麵再來看下各個型別的影片的得分對比:

從型別來看,西部片一騎絕塵,究其原因可能與受眾人群小、愛好者狂野奔的性格易給高分有關。其次,犯罪、動作、冒險、推理、恐怖題材也易出較高評分。

 

2. 年份對比

 

首先我們看下TOP250電影的所屬年份:

Top250電影中,1957、1995、與2014年電影較多,而1975年後,上榜電影有明顯增加的趨勢,這可能與電影工業的日趨成熟有關。

至於1995年,熟悉電影的小夥伴可能知道,1995年是世界電影100週年,無數電影天才抱著獻禮的想法,在這一年誕生了他們偉大的作品,我們較為熟悉的有《肖申克的救贖》《阿甘正傳》《低俗小說》《四個婚禮與一個葬禮》《七宗罪》《獅子王》等。

同時我們看下各個年份電影的評價分數:

比較電影年代評分,並無發現明顯上升或下降趨勢,可見電影藝術並不會隨時間而失去自身價值。對於電影,技術不是第一位的,感情共鳴的因素佔更大權重;哪部電影最好看?答案就在我們每個人心中。

 

3. 國家對比

 

我們看下各個國家的電影在TOP250電影中的佔比情況:

這個資料比較有趣,有點像諾貝爾獎,美國電影占據半壁江山,其餘國家瓜分剩下的蛋糕。排名前幾位的分別是英國、法國、日本、德國。而中國,唯一上榜的電影只有一部——《花樣年華》。

如果是西方主流價值觀的原因,同樣作為東方文化代表的鄰國日本,卻有16部電影上榜,可見西方價值觀並不能成為中國電影上榜少的主要原因。雖然近幾年中國不乏有《大魚海棠》、以及剛最新上映的《流浪地球》這樣高質量的作品上線,但是在國際市場仍反響平平。

我相信電影是有共同語言的,也真的有普世價值觀這樣的東西。如何打造國際化電影工業,給世界人民講故事,是中國電影人接下來需要探索的課題。

 

4. 導演對比

 

我們一起看下那些在TOP250榜單中,最常出現的導演們:

電影界的諾貝爾開獎啦,一起來看看有哪些作者上榜。鑒於大家對外國導演名可能不太熟悉,這裡做了一個導演-代表作做對照表,值得註意的是,雷德利・斯科特、詹姆斯・卡梅隆、大衛・芬奇分別執導了電影《異形1》《異形2》《異形3》,一部《異形》出3個上榜導演,可見其系列影響力,沒看過的小夥伴強烈建議一看,雖然口味可能點重。 

 

5. 人群對比

 

首先我們看下不同人群的評分情況:

從性別維度來看,男性比女性給容易給出高分。另一方面,從年齡段側看,無論男女,未成年人員最易給出高分,隨著年齡增加,評分愈加犀(è)利(dú),超過45歲的人群,給出的分數是最低的。

是否歷經滄海,堅硬的心就越難被打動?又或許見多識廣,才能公正客觀的評價一部電影?也許可以就此問題研究一下,如《電影節評委年齡層的科學配置方法》。

然而知道了評分情況,我們也需要去瞭解下各類人群的佔比情況:

雖然“老叔叔”“老阿姨”們的評分偏低,但是一部電影的口碑高低不用太擔心這類人群。因為資料告訴我們,滿足30-44以及18-29這兩個年齡段的中青年男性口味,電影口碑肯定差不了。從近些年《戰狼》、《紅海行動》,這類戰爭動作片均取得不錯的口碑中,對評分機制可略知一二。

 

6. 型別、年齡與評分的關係

 

首先我們用熱力圖來看下各個人群對不同型別電影的評分情況:

不同年齡群,對電影型別的偏好是不同的。如未成年男性、女性,對推理、西部片表現出濃厚興趣,而45以上的男性、女性,分別對科幻、黑色電影型別鐘愛。

評分的高低也需要結合佔比進行綜合分析:

這次我們將資料粒度細化至各年齡層,結合各年齡段評分,以下我們給出各年齡層在TOP250榜中的推薦電影。

 

 

03 電影推薦 

 

1. 未成年男性(<18)

 

 

2. 18-29歲男性

 

3. 30-44歲男性

 

 

4. 45+男性

 

 

5. 未成年女性(<18)

 

 

6. 18-29歲女性

 

7. 30-44歲女性

 

8. 45+女性

 

以上是根據IMDBtop250資料推薦的電影,如果有不符合的情況,在這裡說聲抱歉。畢竟美國人民的喜好和中國還是有一定區別的。

最後,用《三體》的一首詩作為結尾:

我看到了我的愛戀

我飛到她的身邊

我捧出給她的禮物

那是一小塊凝固的時間

時間上有美麗的條紋

摸起來像淺海的泥一樣柔軟

她把時間塗滿全身

然後拉起我飛向存在的邊緣

這是靈態的飛行

我們眼中的星星像幽靈

星星眼中的我們也像幽靈

公眾號後臺回覆IMDB,可以獲取本文原始碼。

 

據統計,99%的大咖都完成了這個神操作

更多精彩

在公眾號後臺對話方塊輸入以下關鍵詞

檢視更多優質內容!

PPT | 報告 | 讀書 | 書單

大資料 | 揭秘 | 人工智慧 | AI

Python | 機器學習 | 深度學習 | 神經網路

視覺化 | 區塊鏈 | 乾貨 | 數學

猜你想看

Q: 你最想推薦的電影是哪一部?

歡迎留言與大家分享

覺得不錯,請把這篇文章分享給你的朋友

轉載 / 投稿請聯絡:baiyu@hzbook.com

更多精彩,請在後臺點選“歷史文章”檢視

    贊(0)

    分享創造快樂