学习
实践
活动
工具
TVP
写文章
专栏首页DT数据侠豆瓣已玩烂,爬点洋气的:用IMDB数据为你“订制”经典好片

豆瓣已玩烂,爬点洋气的:用IMDB数据为你“订制”经典好片

本文转载自:数据森麟(ID:shujusenlin)

作者:翻滚吧羊宝宝

转战Python半年,接触爬虫2个月,期间读了10本相关书籍,完成此作,算是对过去学习、实践的一次回顾。也希望与更多的Python,爬虫爱好者小伙伴们一起交流、成长

此题目,一来豆瓣作为爬虫入门,各种大牛的深入分析已趋于完美;另一方面随着中国电影工业的发展,我们需要将视角转向国际市场,通过数据分析,了解一下外国人比较感兴趣的电影。

▍01 数据爬取

1. 网页分析

  • IMDB top250主页
  • IMDB电影详情页(1)
  • IMDB 电影详情页(2)

基于以上网页构造,我们发现只需得到每个电影的详情页编码(唯一),通过2次“蛙跳”,实现详情页(1)(2)导出国家&类型,分数&人数的信息的获取。便于理解,爬取思维导图如下:

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
  • 3. 数据展示

最终我们得到了如下数据,并将其进行存储用于后续的分析:

▍02 数据分析

1. 影片类型对比

首先来看一下各个类型的影片占比:

Top250电影的类型占比,前三名分别是喜剧、犯罪与动作。

紧张刺激的情绪、张弛有度的情节,最能带给影迷带来记忆深刻的观影体验。

下面再来看下各个类型的影片的得分对比:

从类型来看,西部片一骑绝尘,究其原因可能与受众人群小、爱好者狂野奔的性格易给高分有关。其次,犯罪、动作、冒险、推理、恐怖题材也易出较高评分。

2. 年份对比

首先我们看下TOP250电影的所属年份:

Top250电影中,1957、1995、与2014年电影较多,而1975年后,上榜电影有明显增加的趋势,这可能与电影工业的日趋成熟有关。

至于1995年,熟悉电影的小伙伴可能知道,1995年是世界电影100周年,无数电影天才抱着献礼的想法,在这一年诞生了他们伟大的作品,我们较为熟悉的有《肖申克的救赎》《阿甘正传》《低俗小说》《四个婚礼与一个葬礼》《七宗罪》《狮子王》等。

同时我们看下各个年份电影的评价分数:

比较电影年代评分,并无发现明显上升或下降趋势,可见电影艺术并不会随时间而失去自身价值。对于电影,技术不是第一位的,感情共鸣的因素占更大权重;哪部电影最好看?答案就在我们每个人心中。

3. 国家对比

我们看下各个国家的电影在TOP250电影中的占比情况:

这个数据比较有趣,有点像诺贝尔奖,美国电影占据半壁江山,其余国家瓜分剩下的蛋糕。排名前几位的分别是英国、法国、日本、德国。而中国,唯一上榜的电影只有一部——《花样年华》。

如果是西方主流价值观的原因,同样作为东方文化代表的邻国日本,却有16部电影上榜,可见西方价值观并不能成为中国电影上榜少的主要原因。虽然近几年中国不乏有《大鱼海棠》、以及刚最新上映的《流浪地球》这样高质量的作品上线,但是在国际市场仍反响平平。

我相信电影是有共同语言的,也真的有普世价值观这样的东西。如何打造国际化电影工业,给世界人民讲故事,是中国电影人接下来需要探索的课题。

4. 导演对比

我们一起看下那些在TOP250榜单中,最常出现的导演们:

电影界的诺贝尔开奖啦,一起来看看有哪些作者上榜。鉴于大家对外国导演名可能不太熟悉,这里做了一个导演-代表作做对照表,值得注意的是,雷德利・斯科特、詹姆斯・卡梅隆、大卫・芬奇分别执导了电影《异形1》《异形2》《异形3》,一部《异形》出3个上榜导演,可见其系列影响力,没看过的小伙伴强烈建议一看,虽然口味可能点重。

5. 人群对比

首先我们看下不同人群的评分情况:

从性别维度来看,男性比女性给容易给出高分。另一方面,从年龄段侧看,无论男女,未成年人员最易给出高分,随着年龄增加,评分愈加犀(è)利(dú),超过45岁的人群,给出的分数是最低的。

是否历经沧海,坚硬的心就越难被打动?又或许见多识广,才能公正客观的评价一部电影?也许可以就此问题研究一下,如《电影节评委年龄层的科学配置方法》。

然而知道了评分情况,我们也需要去了解下各类人群的占比情况:

虽然“老叔叔”“老阿姨”们的评分偏低,但是一部电影的口碑高低不用太担心这类人群。因为数据告诉我们,满足30-44以及18-29这两个年龄段的中青年男性口味,电影口碑肯定差不了。从近些年《战狼》、《红海行动》,这类战争动作片均取得不错的口碑中,对评分机制可略知一二。

6. 类型、年龄与评分的关系

首先我们用热力图来看下各个人群对不同类型电影的评分情况:

不同年龄群,对电影类型的偏好是不同的。如未成年男性、女性,对推理、西部片表现出浓厚兴趣,而45以上的男性、女性,分别对科幻、黑色电影类型钟爱。

评分的高低也需要结合占比进行综合分析:

这次我们将数据粒度细化至各年龄层,结合各年龄段评分,以下我们给出各年龄层在TOP250榜中的推荐电影。

▍03 电影推荐

1. 未成年男性(<18)

2. 18-29岁男性

3. 30-44岁男性

4. 45+男性

5. 未成年女性(<18)

6. 18-29岁女性

7. 30-44岁女性

8. 45+女性

以上是根据IMDBtop250数据推荐的电影,如果有不符合的情况,在这里说声抱歉。毕竟美国人民的喜好和中国还是有一定区别的。

最后,用《三体》的一首诗作为结尾:

我看到了我的爱恋 我飞到她的身边 我捧出给她的礼物 那是一小块凝固的时间 时间上有美丽的条纹 摸起来像浅海的泥一样柔软 她把时间涂满全身 然后拉起我飞向存在的边缘 这是灵态的飞行 我们眼中的星星像幽灵 星星眼中的我们也像幽灵

注:内容仅为作者观点,不代表DT数据侠立场。

题图 | 站酷海洛

文章分享自微信公众号:
DT数据侠

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

原始发表时间:2019-03-04
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 豆瓣已玩烂,来爬点有逼格的 ——IMDB 电影提升你的品位

    转战Python半年,接触爬虫2个月,期间读了10本相关书籍,完成此作,算是对过去学习、实践的一次回顾。也希望与更多的python,爬虫爱好者小伙伴们一起交流、...

    龙哥
  • 如何发一条空白的朋友圈

    所谓空白的朋友圈就是一条看起来没有文字的朋友圈,因为发朋友圈的时候不输入文字是没法发送的。不可见字符是有文字内容的,只是人的肉眼看不见,所以相当于空白。

    数据森麟
  • 《云阅》一个仿网易云音乐UI,使用Gank.Io及豆瓣Api开发的开源项目

    一款基于网易云音乐UI,使用GankIo及豆瓣api开发的符合Google Material Desgin阅读类的开源项目。项目采取的是Retrofit + R...

    Jingbin
  • 利用Python自制贪吃蛇游戏

    玩法介绍: 回车键:开始游戏 空格键:暂停 / 继续 ↑↓←→方向键 或 WSAD 键:控制移动方向。

    数据森麟
  • 豆瓣电影top250爬虫及可视化分析

      人类社会已经进入大数据时代,大数据深刻改变着我们的工作和生活。随着互联网、移动互联网、社交网络等的迅猛发展,各种数量庞大、种类繁多、随时随地产生和更新的大数...

    小孙同学
  • 产品经理思路打造的爆款电影:《网络迷踪》

    上面这句话来自提莫·贝克曼比托夫,是今年大热电影《网络谜踪(Searching)》的制片人,而这部电影是目前本片正在国内上映,上映的三天里已经收获了不错的成绩。

    HyperAI超神经
  • 你知道豆瓣电影是怎么评分的吗?

    “假设,是针对我们的分析结果而言。你希望最后输出一个什么结果,或者你需要证明什么结果,都可以当做假设!”

    小一不二三
  • 爬虫实战-手把手教你爬豆瓣电影

    如果上面三小节还有问题,可以点回去再复习一下。作为基础内容并不是要求大家一定都掌握,特别是第三小节,网页解析用法特别多,一般人很难都记住。 我在写这篇的时候也...

    小一不二三
  • 基于大数据的推荐算法综述

    致力于为机器学习、深度学习、数据挖掘等AI技术的“初学者”或者“爱好者”,进行基础理论与实战技能的介绍和学习。我们团队成员既有各个著名院校的在校硕士生、博士生,...

    数据森麟
  • 从数据小白到职场大咖,所需要的好书我都替你选好了!

    通过Google用户搜索频率来统计排名的PYPL排行榜显示,Python份额高达29.88%,稳居第一,并且猛增4.1%,同时成为增长势头最好的语言。

    CDA数据分析师
  • 纵观30年5000多部国产电视剧,豆瓣评分最低的演员原来是……

    作者介绍:徐麟,目前就职于上海唯品会产品技术中心,哥大统计数据狗,从事数据挖掘&分析工作,喜欢用R&Python玩一些不一样的数据

    量化小白
  • 我是这样开始写Python爬虫的

    刚开始接触爬虫的时候,简直惊为天人,十几行代码,就可以将无数网页的信息全部获取下来,自动选取网页元素,自动整理成结构化的文件。 利用这些数据,可以做很多领域的分...

    企鹅号小编
  • 我是如何零基础开始能写爬虫的

    利用这些数据,可以做很多领域的分析、市场调研,获得很多有价值的信息,可以应用在很多的工作场景,于是果断开始学习。

    Python中文社区
  • 从数据角度探究《前任3》为什么这么火爆

    豆瓣上8万多人只打出了5.8的评分,其中1星-3星占比72.6%,那么问题来了,在绝大多数豆瓣粉丝都认为是“烂片”的情况下,究竟是什么让《前任3》票房意外火爆呢...

    Python攻城狮
  • 现在学习编程是学习JAVA好还是python好?

    首先必须明确一点,Java和Python双方都有各自适合和发展的领域,所以别人常问我学习什么语言好,或者让我在两种语言进行比较好坏,编程语言只有适不适合,不存在...

    Java学习
  • 关于Python爬虫,这里有一条高效的学习路径

    如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,...

    Python进阶者
  • 关于Python数据分析,这里有一条高效的学习路径

    广泛被应用的数据分析 谷歌的数据分析可以预测一个地区即将爆发的流感,从而进行针对性的预防;淘宝可以根据你浏览和消费的数据进行分析,为你精准推荐商品;口碑极好的网...

    Crossin先生
  • 北京焦灼?上海颓废?看大数据如何解读城市性格

    城市如人,在形成的过程中也会显现出独特的性格。具有特殊文化品格和精神气质的城市,无疑是最具吸引力而叫人难忘的。但你是否想过,如何用大数据深度探寻一个城市专属的性...

    DT数据侠

扫码关注腾讯云开发者

领取腾讯云代金券