「这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战」。
前言
利用Python实现奥斯卡金像奖数据可视化。废话不多说。
让我们愉快地开始吧~
开发工具
Python版本: 3.6.4
相关模块:
requests模块
pandas模块
pyecharts模块;
以及一些Python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
分析网页
奥斯卡的相关数据获取,来源于Mtime时光网。
网站没反爬,所以可以轻松获取到数据。
这里以最佳男主角为例,获取时间、获奖者及提名者。
通过一个循环,将最佳男主角、男配角、女主角、女配角信息拿到手。
获取数据
时间、获奖者及提名者信息获取代码如下。
部分代码
import time
import requests
from bs4 import BeautifulSoup
filenames = ['Best_Actor_LR.csv', 'Best_Actress_LR.csv', 'Best_Actor_SR.csv', 'Best_Actress_SR.csv']
def get_message(num1, num2):
"""获取数据"""
time.sleep(5)
years, wins, nominations = [[], [], []]
# 请求网址
url = 'http://award.mtime.com/3/award/3' + str(num1) + '/index' + str(num2) + '.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
response = requests.get(url=url, headers=headers)
html = response.text
# 对请求结果进行编码解码处理,避免出现乱码
html = html.encode('ISO-8859-1')
html = html.decode('utf-8')
# 提取信息
soup = BeautifulSoup(html, 'html.parser')
div = soup.find_all(class_='event_awards event_list')
# 获取时间信息
for dt in div[0].find_all('dt'):
if len(dt) == 1:
year = dt.get_text().replace('\n', '').strip()
years.append(year)
成功获取数据
这里发现网站上少了2008、2009年的数据。需要手动添加
数据可视化
最佳男主角
丹尼尔·戴-刘易斯是目前仅有的一位,三度问鼎奥斯卡最佳男主角的男演员。
那么他的三部获奖作品是哪些呢?
1990年的《我的左脚》,2008年的《血色将至》,2013年的《林肯》。
陪跑者一目了然。
一位是彼德·奥图,另一位则是理查德·伯顿。
最佳女主角
凯瑟琳·赫本「一马当先」。
她的四部获奖作品如下。
1934年的《清晨的荣誉》,1967年的《猜猜谁来吃晚餐》,1968年的《冬狮》,1982年的《金色池塘》。
最佳女主角陪跑者有三位。
分别是黛博拉·蔻儿,朱迪·丹奇,艾琳·邓恩。
最佳男配角
第一名和男主角的情况类似,都是三次获奖。
只不过沃尔特·布伦南获奖时间都是在奥斯卡金像奖的初期。
即第9、11、13届获奖。
「小李子」的第一次提名, 就是最佳男配角提名。
女配角
黛安娜·维斯特和谢丽·温特斯并列第一。
和男配角的情况相似,陪跑者也不少。
男演员
为什么又把所有的信息汇总了呢。
主要是因为观察到,「小李子」在男配角也有提名。
那么难免会出现,两边都有获奖的情况出现。
比如这里的杰克·尼科尔森,《蝙蝠侠》中小丑的饰演者。
他就获得了两个最佳男主角和一个最佳男配角奖项。
陪跑者和最佳男主角的一模一样。
一位彼德·奥图,一位理查德·伯顿。
女演员
发现梅丽尔·斯特里普一共获得了21次提名。
这应该是目前奥斯卡获得提名最多的演员了。