前言
利用Python实现奥斯卡金像奖数据可视化。废话不多说。
让我们愉快地开始吧~
开发工具
Python版本:3.6.4
相关模块:
requests模块
pandas模块
pyecharts模块;
以及一些Python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
分析网页
奥斯卡的相关数据获取,来源于Mtime时光网。
网站没反爬,所以可以轻松获取到数据。
这里以最佳男主角为例,获取时间、获奖者及提名者。
通过一个循环,将最佳男主角、男配角、女主角、女配角信息拿到手。
获取数据
时间、获奖者及提名者信息获取代码如下。
import timeimport requestsfrom bs4 import BeautifulSoupfilenames = ['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 = '/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)# 获取获奖者信息for dd in soup.find_all(class_='yellowbox'):win = dd.find(class_='px14 c_a5').find('a').get_text().split(' ')[0]wins.append(win)# 获取提名者信息for dd in soup.find_all(class_='bluebox'):names = []for k in dd.find_all(class_='px14 c_a5'):name = k.get_text().strip().split(' ')[0]names.append(name)# 提名者有多个,拼接提名者信息nomination = ' '.join(names)nominations.append(nomination)# 写入CSV文件中for year, win, nomination in zip(years, wins, nominations):print(year, win, nomination)filename = filenames[num1]with open(filename, 'a+') as f:f.write(year + ',' + win + ',' + nomination + '\n')f.close()if __name__ == '__main__':for i in range(4):num1 = ifor j in range(1, 10):if j == 1:num2 = ''else:num2 = -jget_message(num1, num2)
成功获取数据
这里发现网站上少了、的数据。需要手动添加
数据可视化
最佳男主角
丹尼尔·戴-刘易斯是目前仅有的一位,三度问鼎奥斯卡最佳男主角的男演员。
那么他的三部获奖作品是哪些呢?
1990年的《我的左脚》,的《血色将至》,的《林肯》。
陪跑者一目了然。
一位是彼德·奥图,另一位则是理查德·伯顿。
最佳女主角
凯瑟琳·赫本「一马当先」。
她的四部获奖作品如下。
1934年的《清晨的荣誉》,1967年的《猜猜谁来吃晚餐》,1968年的《冬狮》,1982年的《金色池塘》。
最佳女主角陪跑者有三位。
分别是黛博拉·蔻儿,朱迪·丹奇,艾琳·邓恩。
最佳男配角
第一名和男主角的情况类似,都是三次获奖。
只不过沃尔特·布伦南获奖时间都是在奥斯卡金像奖的初期。
即第9、11、13届获奖。
「小李子」的第一次提名, 就是最佳男配角提名。
女配角
黛安娜·维斯特和谢丽·温特斯并列第一。
和男配角的情况相似,陪跑者也不少。
男演员
为什么又把所有的信息汇总了呢。
主要是因为观察到,「小李子」在男配角也有提名。
那么难免会出现,两边都有获奖的情况出现。
比如这里的杰克·尼科尔森,《蝙蝠侠》中小丑的饰演者。
他就获得了两个最佳男主角和一个最佳男配角奖项。
陪跑者和最佳男主角的一模一样。
一位彼德·奥图,一位理查德·伯顿。
女演员
发现梅丽尔·斯特里普一共获得了21次提名。
这应该是目前奥斯卡获得提名最多的演员了。