Python爬蟲實戰,requests模塊,Python實現IMDB電影top數據可視化 前言 開發工具 環境搭建 思路分析 爬蟲代碼 結果展示 數據分析 電影推薦

前言

利用Python爬取IMDB電影。廢話不多說。

讓我們愉快地開始吧~

開發工具

Python版本: 3.6.4

相關模塊:

requests模塊;

random模塊;

bs4模塊;

以及一些Python自帶的模塊。

環境搭建

安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。

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

思路分析

IMDB top250主頁

IMDB電影詳情頁 (1)

IMDB 電影詳情頁 (2)

基於以上網頁構造,我們發現只需得到每個電影的詳情頁編碼(唯一),通過2次“蛙跳”,實現詳情頁(1)(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

結果展示

數據分析

影片類型對比

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

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

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

下面再來看下各個類型的影片的得分對比

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

年份對比

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

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

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

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

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

國家對比

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

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

如果是西方主流價值觀的原因,同樣作爲東方文化代表的鄰國日本,卻有16部電影上榜,可見西方價值觀並不能成爲中國電影上榜少的主要原因。雖然近幾年中國不乏有《大魚海棠》、以及剛最新上映的《流浪地球》這樣高質量的作品上線,但是在國際市場仍反響平平。我相信電影是有共同語言的,也真的有普世價值觀這樣的東西。如何打造國際化電影工業,給世界人民講故事,是中國電影人接下來需要探索的課題。

導演對比

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

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

人羣對比

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

從性別維度來看,男性比女性給容易給出高分。另一方面,從年齡段側看,無論男女,未成年人員最易給出高分,隨着年齡增加,評分愈加犀(è)利(dú),超過45歲的人羣,給出的分數是最低的。是否歷經滄海,堅硬的心就越難被打動?又或許見多識廣,才能公正客觀的評價一部電影?也許可以就此問題研究一下,如《電影節評委年齡層的科學配置方法》。

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

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

類型、年齡與評分的關係

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

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

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

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

電影推薦

未成年男性(<18)

18-29歲男性

30-44歲男性

45+男性

未成年女性(<18)

18-29歲女性

30-44歲女性

45+女性

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章