導航:首頁 > 電影人物 > 豆瓣電影評價人數怎麼爬取

豆瓣電影評價人數怎麼爬取

發布時間:2023-01-27 01:34:07

㈠ 求一份Python爬取豆瓣影評數據集,多部電影,多影評的,哎

這種類型的

㈡ 如何用python爬取豆瓣讀書的數據

這兩天爬了豆瓣讀書的十萬條左右的書目信息,用時將近一天,現在趁著這個空閑把代碼總結一下,還是菜鳥,都是用的最簡單最笨的方法,還請路過的大神不吝賜教。
第一步,先看一下我們需要的庫:

import requests #用來請求網頁
from bs4 import BeautifulSoup #解析網頁
import time #設置延時時間,防止爬取過於頻繁被封IP號
import re #正則表達式庫
import pymysql #由於爬取的數據太多,我們要把他存入MySQL資料庫中,這個庫用於連接資料庫
import random #這個庫里用到了產生隨機數的randint函數,和上面的time搭配,使爬取間隔時間隨機

這個是豆瓣的網址:x-sorttags-all
我們要從這里獲取所有分類的標簽鏈接,進一步去爬取裡面的信息,代碼先貼上來:

import requests
from bs4 import BeautifulSoup #導入庫

url="httom/tag/?icn=index-nav"
wb_data=requests.get(url) #請求網址
soup=BeautifulSoup(wb_data.text,"lxml") #解析網頁信息
tags=soup.select("#content > div > div.article > div > div > table > tbody > tr > td > a")
#根據CSS路徑查找標簽信息,CSS路徑獲取方法,右鍵-檢查- selector,tags返回的是一個列表
for tag in tags:
tag=tag.get_text() #將列表中的每一個標簽信息提取出來
helf="hom/tag/"
#觀察一下豆瓣的網址,基本都是這部分加上標簽信息,所以我們要組裝網址,用於爬取標簽詳情頁
url=helf+str(tag)
print(url) #網址組裝完畢,輸出

以上我們便爬取了所有標簽下的網址,我們將這個文件命名為channel,並在channel中創建一個channel字元串,放上我們所有爬取的網址信息,等下爬取詳情頁的時候直接從這里提取鏈接就好了,如下:

channel='''
tag/程序
'''

現在,我們開始第二個程序。


QQ圖片20160915233329.png


標簽頁下每一個圖片的信息基本都是這樣的,我們可以直接從這里提取到標題,作者,出版社,出版時間,價格,評價人數,以及評分等信息(有些外國作品還會有譯者信息),提取方法與提取標簽類似,也是根據CSS路徑提取。
我們先用一個網址來實驗爬取:

url="htt/tag/科技"
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text.encode("utf-8"), "lxml")
tag=url.split("?")[0].split("/")[-1] #從鏈接裡面提取標簽信息,方便存儲
detils=soup.select("#subject_list > ul > li > div.info > div.pub") #抓取作者,出版社信息,稍後我們用spite()函數再將他們分離出來
scors=soup.select("#subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums") #抓取評分信息
persons=soup.select("#subject_list > ul > li > div.info > div.star.clearfix > span.pl") #評價人數
titles=soup.select("#subject_list > ul > li > div.info > h2 > a") #書名
#以上抓取的都是我們需要的html語言標簽信息,我們還需要將他們一一分離出來
for detil,scor,person,title in zip(detils,scors,persons,titles):
#用一個zip()函數實現一次遍歷
#因為一些標簽中有譯者信息,一些標簽中沒有,為避免錯誤,所以我們要用一個try來把他們分開執行
try:
author=detil.get_text().split("/",4)[0].split()[0] #這是含有譯者信息的提取辦法,根據「/」 把標簽分為五部分,然後依次提取出來
yizhe= detil.get_text().split("/", 4)[1]
publish=detil.get_text().split("/", 4)[2]
time=detil.get_text().split("/", 4)[3].split()[0].split("-")[0] #時間我們只提取了出版年份
price=ceshi_priceone(detil) #因為價格的單位不統一,我們用一個函數把他們換算為「元」
scoe=scor.get_text() if True else "" #有些書目是沒有評分的,為避免錯誤,我們把沒有評分的信息設置為空
person=ceshi_person(person) #有些書目的評價人數顯示少於十人,爬取過程中會出現錯誤,用一個函數來處理
title=title.get_text().split()[0]
#當沒有譯者信息時,會顯示IndexError,我們分開處理
except IndexError:
try:
author=detil.get_text().split("/", 3)[0].split()[0]
yizhe="" #將detil信息劃分為4部分提取,譯者信息直接設置為空,其他與上面一樣
publish=detil.get_text().split("/", 3)[1]
time=detil.get_text().split("/", 3)[2].split()[0].split("-")[0]
price=ceshi_pricetwo(detil)
scoe=scor.get_text() if True else ""
person=ceshi_person(person)
title=title.get_text().split()[0]
except (IndexError,TypeError):
continue
#出現其他錯誤信息,忽略,繼續執行(有些書目信息下會沒有出版社或者出版年份,但是數量很少,不影響我們大規模爬取,所以直接忽略)
except TypeError:
continue

#提取評價人數的函數,如果評價人數少於十人,按十人處理
def ceshi_person(person):
try:
person = int(person.get_text().split()[0][1:len(person.get_text().split()[0]) - 4])
except ValueError:
person = int(10)
return person

#分情況提取價格的函數,用正則表達式找到含有特殊字元的信息,並換算為「元」
def ceshi_priceone(price):
price = detil.get_text().split("/", 4)[4].split()
if re.match("USD", price[0]):
price = float(price[1]) * 6
elif re.match("CNY", price[0]):
price = price[1]
elif re.match("A$", price[0]):
price = float(price[1:len(price)]) * 6
else:
price = price[0]
return price
def ceshi_pricetwo(price):
price = detil.get_text().split("/", 3)[3].split()
if re.match("USD", price[0]):
price = float(price[1]) * 6
elif re.match("CNY", price[0]):
price = price[1]
elif re.match("A$", price[0]):
price = float(price[1:len(price)]) * 6
else:
price = price[0]
return price

實驗成功後,我們就可以爬取數據並導入到資料庫中了,以下為全部源碼,特殊情況會用注釋一一說明。

import requests
from bs4 import BeautifulSoup
import time
import re
import pymysql
from channel import channel #這是我們第一個程序爬取的鏈接信息
import random

def ceshi_person(person):
try:
person = int(person.get_text().split()[0][1:len(person.get_text().split()[0]) - 4])
except ValueError:
person = int(10)
return person

def ceshi_priceone(price):
price = detil.get_text().split("/", 4)[4].split()
if re.match("USD", price[0]):
price = float(price[1]) * 6
elif re.match("CNY", price[0]):
price = price[1]
elif re.match("A$", price[0]):
price = float(price[1:len(price)]) * 6
else:
price = price[0]
return price

def ceshi_pricetwo(price):
price = detil.get_text().split("/", 3)[3].split()
if re.match("USD", price[0]):
price = float(price[1]) * 6
elif re.match("CNY", price[0]):
price = price[1]
elif re.match("A$", price[0]):
price = float(price[1:len(price)]) * 6
else:
price = price[0]
return price


#這是上面的那個測試函數,我們把它放在主函數中
def mains(url):
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text.encode("utf-8"), "lxml")
tag=url.split("?")[0].split("/")[-1]
detils=soup.select("#subject_list > ul > li > div.info > div.pub")
scors=soup.select("#subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums")
persons=soup.select("#subject_list > ul > li > div.info > div.star.clearfix > span.pl")
titles=soup.select("#subject_list > ul > li > div.info > h2 > a")
for detil,scor,person,title in zip(detils,scors,persons,titles):
l = [] #建一個列表,用於存放數據
try:
author=detil.get_text().split("/",4)[0].split()[0]
yizhe= detil.get_text().split("/", 4)[1]
publish=detil.get_text().split("/", 4)[2]
time=detil.get_text().split("/", 4)[3].split()[0].split("-")[0]
price=ceshi_priceone(detil)
scoe=scor.get_text() if True else ""
person=ceshi_person(person)
title=title.get_text().split()[0]
except IndexError:
try:
author=detil.get_text().split("/", 3)[0].split()[0]
yizhe=""
publish=detil.get_text().split("/", 3)[1]
time=detil.get_text().split("/", 3)[2].split()[0].split("-")[0]
price=ceshi_pricetwo(detil)
scoe=scor.get_text() if True else ""
person=ceshi_person(person)
title=title.get_text().split()[0]
except (IndexError,TypeError):
continue

except TypeError:
continue
l.append([title,scoe,author,price,time,publish,person,yizhe,tag])
#將爬取的數據依次填入列表中


sql="INSERT INTO allbooks values(%s,%s,%s,%s,%s,%s,%s,%s,%s)" #這是一條sql插入語句
cur.executemany(sql,l) #執行sql語句,並用executemary()函數批量插入資料庫中
conn.commit()

#主函數到此結束


# 將Python連接到MySQL中的python資料庫中
conn = pymysql.connect( user="root",password="123123",database="python",charset='utf8')
cur = conn.cursor()

cur.execute('DROP TABLE IF EXISTS allbooks') #如果資料庫中有allbooks的資料庫則刪除
sql = """CREATE TABLE allbooks(
title CHAR(255) NOT NULL,
scor CHAR(255),
author CHAR(255),
price CHAR(255),
time CHAR(255),
publish CHAR(255),
person CHAR(255),
yizhe CHAR(255),
tag CHAR(255)
)"""
cur.execute(sql) #執行sql語句,新建一個allbooks的資料庫


start = time.clock() #設置一個時鍾,這樣我們就能知道我們爬取了多長時間了
for urls in channel.split():
urlss=[urls+"?start={}&type=T".format(str(i)) for i in range(0,980,20)] #從channel中提取url信息,並組裝成每一頁的鏈接
for url in urlss:
mains(url) #執行主函數,開始爬取
print(url) #輸出要爬取的鏈接,這樣我們就能知道爬到哪了,發生錯誤也好處理
time.sleep(int(format(random.randint(0,9)))) #設置一個隨機數時間,每爬一個網頁可以隨機的停一段時間,防止IP被封
end = time.clock()
print('Time Usage:', end - start) #爬取結束,輸出爬取時間
count = cur.execute('select * from allbooks')
print('has %s record' % count) #輸出爬取的總數目條數

# 釋放數據連接
if cur:
cur.close()
if conn:
conn.close()

這樣,一個程序就算完成了,豆瓣的書目信息就一條條地寫進了我們的資料庫中,當然,在爬取的過程中,也遇到了很多問題,比如標題返回的信息拆分後中會有空格,寫入資料庫中會出現錯誤,所以只截取了標題的第一部分,因而導致資料庫中的一些書名不完整,過往的大神如果有什麼辦法,還請指教一二。
等待爬取的過程是漫長而又欣喜的,看著電腦上一條條信息被刷出來,成就感就不知不覺湧上心頭;然而如果你吃飯時它在爬,你上廁所時它在爬,你都已經爬了個山回來了它還在爬時,便會有點崩潰了,擔心電腦隨時都會壞掉(還是窮學生換不起啊啊啊啊~)
所以,還是要好好學學設置斷點,多線程,以及正則,路漫漫其修遠兮,吾將上下而求索~共勉~

㈢ 怎樣避開豆瓣對爬蟲的封鎖,從而抓取豆瓣上電影內容

在互聯網中,有網路爬蟲的地方,絕對少不了反爬蟲的身影。網站反爬蟲的攔截前提是要正確區分人類訪問用戶和網路機器人,當發現可疑目標時,通過限制IP地址等措施阻止你繼續訪問。爬蟲該如何突破反爬蟲限制?

一、構建合理的HTTP請求頭
HTTP的請求頭是在你每次向網路伺服器發送請求時,傳遞的一組屬性和配置信息。由於瀏覽器和Python爬蟲發送的請求頭不同,有可能被反爬蟲檢測出來。

二、設置cookie的學問
Cookie是一把雙刃劍,有它不行,沒它更不行。網站會通過cookie跟蹤你的訪問過程,如果發現你有爬蟲行為會立刻中斷你的訪問,比如你特別快的填寫表單,或者短時間內瀏覽大量頁面。而正確地處理cookie,又可以避免很多採集問題,建議在採集網站過程中,檢查一下這些網站生成的cookie,然後想想哪一個是爬蟲需要處理的。

三、正常的時間訪問路徑
合理控制採集速度,是Python爬蟲不應該破壞的規則,盡量為每個頁面訪問時間增加一點兒間隔,可以有效幫助你避免反爬蟲。

四、使用http
對於分布式爬蟲和已經遭遇反爬蟲的人來說,使用http將成為你的首選。Ipidea分布地區廣,可滿足分布式爬蟲使用需要。支持api提取,對Python爬蟲來說再適合不過。

㈣ 豆瓣電影的評分怎麼來的

豆瓣的注冊用戶看完一部電影,心情好的話會來打個一到五星的分(有時候心情不好也會來)。比方說一部電影有42萬用戶打分。我們的程序把這42萬個一到五星換算成零到十分,加起來除以42萬,就得到了豆瓣評分。這個評分會自動出現在豆瓣各處,中間沒有審核,平時也沒有編輯盯著看。每過若干分鍾,程序會自動重跑一遍,把最新打分的人的意見包括進來。

那42萬用戶里可能包括資深電影評論家,可能包括你、你的親戚、你的小學同學、早晨賣你油條的那個人,也可能包括阿北我個人。但每個人都是一票。這個是「大眾評審團」應該的含義:不是說團里的人全都大眾,而是說和大眾一樣一人一票。

——《豆瓣電影評分八問》

㈤ 【python爬蟲實戰】爬取豆瓣影評數據

爬取豆瓣影評數據步驟:
1、獲取網頁請求
2、解析獲取的網頁
3、提速數據
4、保存文件

㈥ Python爬蟲如何抓取豆瓣影評中的所有數據

你可以用前嗅爬蟲採集豆瓣的影評,我之前用的,還可以過濾只採集評分在6分以上的所有影評,非常強大,而且他們軟體跟資料庫對接,採集完數據後,直接入庫,導出excel表。很省心。

㈦ Python抓取豆瓣電影排行榜

1.觀察url
首先觀察一下網址的結構 http://movie.douban.com/top250?start=0&filter=&type= :
可以看到,問號?後有三個參數 start、filter、type,其中start代表頁碼,每頁展示25部電影,0代表第一頁,以此類推25代表第二頁,50代表第三頁...
filter顧名思義,是過濾已經看過的電影,filter和type在這里不重要,可以不管。
2.查看網頁源代碼
打開上面的網址,查看源代碼,可以看到信息的展示結構如下:
1 <ol class="grid_view"> 2 <li> 3 <div class="item"> 4 <div class="pic"> 5 <em class="">1</em> 6 <a href="http://movie.douban.com/subject/1292052/"> 7 <img alt="肖申克的救贖" src="http://img3.douban.com/view/movie_poster_cover/ipst/public/p480747492.jpg" class=""> 8 </a> 9 </div>10 <div class="info">11 <div class="hd">12 <a href="http://movie.douban.com/subject/1292052/" class="">13 <span class="title">肖申克的救贖</span>14 <span class="title"> / The Shawshank Redemption</span>15 <span class="other"> / 月黑高飛(港) / 刺激1995(台)</span>16 </a>17 18 19 <span class="playable">[可播放]</span>20 </div>21 <div class="bd">22 <p class="">23 導演: 弗蘭克·德拉邦特 Frank Darabont 主演: 蒂姆·羅賓斯 Tim Robbins /...<br>24 1994 / 美國 / 犯罪 劇情25 </p>26 27 28 <div class="star">29 <span class="rating5-t"><em>9.6</em></span>30 <span>646374人評價</span>31 </div>32 33 <p class="quote">34 <span class="inq">希望讓人自由。</span>35 </p>36 </div>37 </div>38 </div>39 </li>
其中<em class="">1</em>代表排名,<span class="title">肖申克的救贖</span>代表電影名,其他信息的含義也很容易能看出來。
於是接下來可以寫正則表達式:
1 pattern = re.compile(u'<div.*?class="item">.*?<div.*?class="pic">.*?' 2 + u'<em.*?class="">(.*?)</em>.*?' 3 + u'<div.*?class="info">.*?<span.*?class="title">(.*?)' 4 + u'</span>.*?<span.*?class="title">(.*?)</span>.*?' 5 + u'<span.*?class="other">(.*?)</span>.*?</a>.*?' 6 + u'<div.*?class="bd">.*?<p.*?class="">.*?' 7 + u'導演: (.*?) ' 8 + u'主演: (.*?)<br>' 9 + u'(.*?) / (.*?) / '10 + u'(.*?)</p>'11 + u'.*?<div.*?class="star">.*?<em>(.*?)</em>'12 + u'.*?<span>(.*?)人評價</span>.*?<p.*?class="quote">.*?'13 + u'<span.*?class="inq">(.*?)</span>.*?</p>', re.S)
在此處flag參數re.S代表多行匹配。
3.使用面向對象的設計模式編碼
代碼如下:
1 # -*- coding:utf-8 -*- 2 __author__ = 'Jz' 3 import urllib2 4 import re 5 import sys 6 7 class MovieTop250: 8 def __init__(self): 9 #設置默認編碼格式為utf-810 reload(sys)11 sys.setdefaultencoding('utf-8')12 self.start = 013 self.param = '&filter=&type='14 self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'}15 self.movieList = []16 self.filePath = 'D:/coding_file/python_file/File/DoubanTop250.txt'17 18 def getPage(self):19 try:20 URL = 'http://movie.douban.com/top250?start=' + str(self.start)21 request = urllib2.Request(url = URL, headers = self.headers)22 response = urllib2.urlopen(request)23 page = response.read().decode('utf-8')24 pageNum = (self.start + 25)/2525 print '正在抓取第' + str(pageNum) + '頁數據...' 26 self.start += 2527 return page28 except urllib2.URLError, e:29 if hasattr(e, 'reason'):30 print '抓取失敗,具體原因:', e.reason31 32 def getMovie(self):33 pattern = re.compile(u'<div.*?class="item">.*?<div.*?class="pic">.*?'34 + u'<em.*?class="">(.*?)</em>.*?'35 + u'<div.*?class="info">.*?<span.*?class="title">(.*?)'36 + u'</span>.*?<span.*?class="title">(.*?)</span>.*?'37 + u'<span.*?class="other">(.*?)</span>.*?</a>.*?'38 + u'<div.*?class="bd">.*?<p.*?class="">.*?'39 + u'導演: (.*?) '40 + u'主演: (.*?)<br>'41 + u'(.*?) / (.*?) / '42 + u'(.*?)</p>'43 + u'.*?<div.*?class="star">.*?<em>(.*?)</em>'44 + u'.*?<span>(.*?)人評價</span>.*?<p.*?class="quote">.*?'45 + u'<span.*?class="inq">(.*?)</span>.*?</p>', re.S)46 while self.start <= 225:47 page = self.getPage()48 movies = re.findall(pattern, page)49 for movie in movies:50 self.movieList.append([movie[0], movie[1], movie[2].lstrip(' / '),
51 movie[3].lstrip(' / '), movie[4],
52 movie[5], movie[6].lstrip(), movie[7], movie[8].rstrip(),53 movie[9], movie[10], movie[11]])54 55 def writeTxt(self):56 fileTop250 = open(self.filePath, 'w')57 try:58 for movie in self.movieList:59 fileTop250.write('電影排名:' + movie[0] + '\r\n')60 fileTop250.write('電影名稱:' + movie[1] + '\r\n')61 fileTop250.write('外文名稱:' + movie[2] + '\r\n')62 fileTop250.write('電影別名:' + movie[3] + '\r\n')63 fileTop250.write('導演姓名:' + movie[4] + '\r\n')64 fileTop250.write('參與主演:' + movie[5] + '\r\n')65 fileTop250.write('上映年份:' + movie[6] + '\r\n')66 fileTop250.write('製作國家/地區:' + movie[7] + '\r\n')67 fileTop250.write('電影類別:' + movie[8] + '\r\n')68 fileTop250.write('電影評分:' + movie[9] + '\r\n')69 fileTop250.write('參評人數:' + movie[10] + '\r\n')70 fileTop250.write('簡短影評:' + movie[11] + '\r\n\r\n')71 print '文件寫入成功...'72 finally:73 fileTop250.close()74 75 def main(self):76 print '正在從豆瓣電影Top250抓取數據...'77 self.getMovie()78 self.writeTxt()79 print '抓取完畢...'80 81 DouBanSpider = MovieTop250()82 DouBanSpider.main()

代碼比較簡單,最後將信息寫入一個文件,沒有什麼需要解釋的地方。

㈧ Python爬蟲實戰(1)requests爬取豆瓣電影TOP250

爬取時間:2020/11/25
系統環境:Windows 10
所用工具:Jupyter NotebookPython 3.0
涉及的庫:requestslxmlpandasmatplotlib umpy

蛋肥想法: 先將電影名稱、原名、評分、評價人數、分類信息從網站上爬取下來。

蛋肥想法: print數據列表後發現電影原名、分類信息等存在不需要的字元,需預先處理;同時因為後續想做一個豆瓣電影TOP250的維度分布圖,而同一電影存在多個發行國家、類型(如「法國 美國 / 劇情 動作 犯罪」),為了簡(偷)便(懶),這里均取第一個作為記入的數據;最後將數據保存為xlsx。

蛋肥想法: 蛋肥想知道在豆瓣電影TOP250中年份、國家、類型的維度數據,為了練手,使用剛才保存成xlsx的數據,並分別畫成雷達圖、柱形圖、扇形圖。

㈨ 豆瓣電影數據分析

這篇報告是我轉行數據分析後的第一篇報告,當時學完了Python,SQL,BI以為再做幾個項目就能找工作了,事實上……分析思維、業務,這兩者遠比工具重要的多。一個多月後回過頭來看,這篇報告雖然寫得有模有樣,但和數據分析報告還是有挺大差別的,主要原因在於:a.只是針對豆瓣電影數據分析太過寬泛了,具體關鍵指標到底是哪些呢?;b.沒有一個確切有效的分析模型/框架,會有種東一塊西一塊的拼接感。
即便有著這些缺點,我還是想把它掛上來,主要是因為:1.當做Pandas與爬蟲(Selenium+Request)練手,總得留下些證明;2.以豆瓣電影進行分析確實很難找到一條業務邏輯線支撐,總體上還是描述統計為主;3.比起網上能搜到的其他豆瓣電影數據分析,它更為詳細,可視化效果也不錯;

本篇報告旨在針對豆瓣電影1990-2020的電影數據進行分析,首先通過編寫Python網路爬蟲爬取了51375條電影數據,採集對象包括:電影名稱、年份、導演、演員、類型、出品國家、語言、時長、評分、評論數、不同評價佔比、網址。經過去重、清洗,最後得到29033條有效電影數據。根據電影評分、時長、地區、類型進行分析,描述了評分與時長、類型的關系,並統計了各個地區電影數量與評分。之後,針對演員、導演對數據進行聚合,給出產量與評分最高的名單。在分析過程中,還發現電影數量今年逐步增加,但評分下降,主要原因是中國地區今年低質量影視作品的增加。

另外,本篇報告還爬取了電影票房網( http://58921.com/ )1995-2020年度國內上映的影片票房,共採集4071條數據,其中3484條有效。進一步,本文分析了國內院線電影票房年度變化趨勢,票房與評分、評價人數、時長、地區的關系,票房與電影類型的關聯,並給出了票房最高的導演、演員與電影排名。

清洗、去重後,可以看到29033條數據長度、評分、評論數具有以下特點:

結合圖1(a)(b)看,可以看到電影數據時長主要集中在90-120分鍾之間,向兩極呈現階梯狀遞減,將數據按照短(60-90分鍾),中(90-120分鍾),長(120-150分鍾),特長(>150分鍾)劃分,各部分佔比為21.06%, 64.15%, 11.95%, 2.85%。

結合圖2(a)看,可以看到我們採集到的電影數據評分主要集中在6.0-8.0之間,向兩極呈現階梯狀遞減,在此按照評分劃分區間:2.0-4.0為口碑極差,4.0-6.0為口碑較差,6.0-7.0為口碑尚可,7.0-8.0為口碑較好,8.0-10.0為口碑極佳。

這5種電影數據的佔比分別為:5.78%, 23.09%, 30.56%, 29.22%, 11.34%

再將評分數據細化到每年進行觀察,可以發現,30年內電影數量與年度電影均分呈反相關,年度均分整體呈現下降趨勢,2016年電影均分最低,電影數量最多。

進一步做出每個年份下不同評級等級的電影數據佔比,可以發現,近年來,評分在[2.0,6.0)的電影數據佔比有著明顯提升,評分在[6.0,7.0)的數據佔比不變,評分在[7.0,10.0)的數據佔比減少,可能原因有:

對照圖5,可以發現,評分與時長、評論人數的分布大致呈現漏斗狀,高分電影位於漏鬥上部,低分電影位於漏斗下部。這意味著,如果一部電影的評論人數很多(特別是超過30w人觀影),時長較長(大於120min),那麼它大概率是一部好電影。

根據各個國家的電影數量作圖,可以得到圖6,列出電影數量前十的國家可得表格2,發現美國在電影數量上占第一,達到8490部,中國其次,達6222部。此外,法國,英國,日本的電影數量也超過1000,其餘各國電影數量相對較少。這可以說明美國電影有著較大的流量輸入,在中國產生了較大的影響。

進一步分析各國電影的質量,依據評分繪制評分箱線圖可得圖7,在電影數量排名前20的國家中:

接著我們可以探索,哪個國家的電影對豆瓣評分隨年份下降的貢獻最大,考慮到電影數量對應著評分的權重。根據上述各國的電影評分表現,我們可以猜測電影數量較多的國家可能對年度均分的下降有較大影響。於是,我們再計算出這些國家的年度電影均分,並與整體均分進行比較分析。

再作出中國大陸,中國台灣,中國香港的均分箱線圖圖9(a),可以看到,大陸電影均分低於港台電影,且存在大量低分電影拉低了箱體的位置。

分析相關性可得,大陸、香港、台灣電影年度均分與全部評分關聯度分別為R=0.979,0.919,0.822,說明濾去台灣和香港電影,大陸電影年度均分的變化趨勢與全部評分變化更接近。圖9(b)可以進一步反映這一點。

可以看到,大部分類型集中在X×Y=[10000,30000]×[6.00,7.50]的區間范圍內,劇情、喜劇、愛情、犯罪、動作類電影數量上較多,說明這些題材的電影是近三十年比較熱門的題材,其中劇情類電影佔比最多,音樂、傳記類電影平均得分更高,但在數量上較少,動作、驚悚類電影評論人數雖多,但評價普遍偏低。

除此之外,還有兩塊區域值得關註:

根據類型對電影數據進行聚合,整理得到各類型電影評分的時間序列,計算它們與整體均分時間序列的相關性,可得表格4與圖11,可以看到劇情,喜劇,懸疑這三種類型片與總分趨勢變化相關性最強,同時劇情、喜劇類電影在電影數量上也最多,因此可以認為這兩類電影對於下跌趨勢影響最大,但其餘類別電影的相關性也達到了0.9以上,說明幾種熱門的電影得分的變化趨勢與總體均分趨勢一致。

前面已經得知,中美兩國電影佔比最高,且對於均分時間序列的影響最大。在此,進一步對兩國電影進行類型分析,選取幾種主要的類型(數量上較多,且相關性較高)進行分析,分別是劇情,喜劇,愛情,驚悚,動作,懸疑類電影,繪制近年來幾類電影的數量變化柱狀圖與評分箱線圖可得圖12,13,14,15。

對導演與演員進行聚合,得到數據中共有15011名導演,46223名演員。按照作品數量在(0,2], (2,5], (5,10], (10,20], (20,999]進行分組統計導演數量,可以發現,15009名導演中有79.08%只拍過1-2部作品,46220名演員中有75.93%只主演過1-2部作品。忽略那些客串、跑龍套的演員,數據總體符合二八定律,即20%的人占據了行業內的大量資源。

在此,可以通過電影得分、每部電影評論人數以及電影數目尋找優秀的電影導演與演員。這三項指標分別衡量了導演/演員的創作水平,人氣以及產能。考慮到電影數據集中可能有少量影視劇/劇場版動畫,且影視劇/劇場版動畫受眾少於電影,但得分普遍要高於電影,這里根據先根據每部電影評論數量、作品數量來篩選導演/演員,再根據電影得分進行排名,並取前30名進行作圖,可得圖17,18。

結合電影票房網( http://58921.com/ )採集到的3353條票房數據,與豆瓣數據按照電影名稱進行匹配,可以得到1995-2020年在中國大陸上映的電影信息,分別分析中國內地電影的數量、票房變化趨勢,票房與評分、評價人數、時長、地區以及類型的關系,此外還給出了不同導演與演員的票房表現以及影片票房排名。

如圖19所示,國內票房數據與上映的電影數量逐年遞增,2020年記錄的只是上半年的數據,且由於受疫情影響,票房與數量驟減。這說明在不發生重大事件的情況下,國內電影市場規模正在不斷擴大。

對電影數據根據類型進行聚合,繪制散點圖21,可以發現:

提取導演/演員姓名,對導演/演員欄位進行聚合,計算每個導演/演員的票房總和,上映電影均分、以及執導/參與電影數目進行計算,作出票房總和前30名的導演/演員,可得圖22,23,圖中導演/演員標號反映了票房排名,具體每位導演/演員的上映影片數量、均分、每部電影評價人數、平均時長與總票房在表5、表6中給出。

最後根據電影票房進行排名,得到票房排名前20的電影如表格7所示,可以看到絕大部分上榜電影都是中國電影,索引序號為3、10、12、14、18、19為美國電影,這也反映了除國產電影之外,好萊塢大片占據較大的市場。

本篇報告採集了1990-2020年間豆瓣電影29033組有效數據,從豆瓣電影的評分、時長、地區、類型、演員、導演以及票房等信息進行分析評價,主要有以下結論:

閱讀全文

與豆瓣電影評價人數怎麼爬取相關的資料

熱點內容
中國電影什麼與中國電影經濟獎 瀏覽:70
2366zz倫理電影 瀏覽:757
感人老電影 瀏覽:473
吉林市哪個電影院有包房 瀏覽:286
哪個網站新電影多 瀏覽:675
中國電影中的啪啪鏡頭 瀏覽:920
扎兩個辮子的女孩國外電影 瀏覽:927
外國殺父親電影 瀏覽:22
日本女明星拍電影名字 瀏覽:406
電影我把孩子放大了 瀏覽:164
年三十有新電影看嗎 瀏覽:59
經典電影奇門遁甲術 瀏覽:193
紅顏國語電影 瀏覽:573
電影中比較經典的話語 瀏覽:484
打響武漢抗擊新冠疫情的電影 瀏覽:388
熱愛自然陽光的電影人物 瀏覽:956
廣州哪個區看電影最好 瀏覽:228
人物紀傳的電影 瀏覽:869
電影天堂網倫理 瀏覽:890
香港電影追魂令 瀏覽:41