Python爬虫实战,pyecharts模块,Python实现奥斯卡金像奖数据可视化

Cooci

前言

利用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)
    # 获取获奖者信息
    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 = i
        for j in range(1, 10):
            if j == 1:
                num2 = ''
            else:
                num2 = -j
            get_message(num1, num2)

成功获取数据

数据1

数据2

这里发现网站上少了2008、2009年的数据。需要手动添加

数据可视化

最佳男主角

奥斯卡最佳男主角-获奖统计

丹尼尔·戴-刘易斯是目前仅有的一位,三度问鼎奥斯卡最佳男主角的男演员。

那么他的三部获奖作品是哪些呢?

1990年的《我的左脚》,2008年的《血色将至》,2013年的《林肯》。

奥斯卡最佳男主角-提名统计

陪跑者一目了然。

一位是彼德·奥图,另一位则是理查德·伯顿。

最佳女主角

奥斯卡最佳女主角-获奖统计

凯瑟琳·赫本「一马当先」。

她的四部获奖作品如下。

1934年的《清晨的荣誉》,1967年的《猜猜谁来吃晚餐》,1968年的《冬狮》,1982年的《金色池塘》。

奥斯卡最佳女主角-提名统计

最佳女主角陪跑者有三位。

分别是黛博拉·蔻儿,朱迪·丹奇,艾琳·邓恩。

最佳男配角

奥斯卡最佳男配角-获奖统计

第一名和男主角的情况类似,都是三次获奖。

只不过沃尔特·布伦南获奖时间都是在奥斯卡金像奖的初期。

即第9、11、13届获奖。

奥斯卡最佳男配角-提名统计

「小李子」的第一次提名, 就是最佳男配角提名。

女配角

奥斯卡最佳女配角-获奖统计

黛安娜·维斯特和谢丽·温特斯并列第一。

奥斯卡最佳女配角-提名统计

和男配角的情况相似,陪跑者也不少。

男演员

奥斯卡男演员-获奖统计

为什么又把所有的信息汇总了呢。

主要是因为观察到,「小李子」在男配角也有提名。

那么难免会出现,两边都有获奖的情况出现。

比如这里的杰克·尼科尔森,《蝙蝠侠》中小丑的饰演者。

他就获得了两个最佳男主角和一个最佳男配角奖项。

奥斯卡男演员-提名统计

陪跑者和最佳男主角的一模一样。

一位彼德·奥图,一位理查德·伯顿。

本文完整版代码详见个人主页简介

女演员

奥斯卡女演员-获奖统计

奥斯卡女演员-提名统计

发现梅丽尔·斯特里普一共获得了21次提名。

这应该是目前奥斯卡获得提名最多的演员了。

阅读 116

Python实训营直播预约:[链接]

372 声望
36 粉丝
0 条评论

Python实训营直播预约:[链接]

372 声望
36 粉丝
文章目录
宣传栏