Python数据可视化:豆瓣电影TOP250

2023-11-18

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

作者:法纳斯特,Python爱好者,专注爬虫,数据分析及可视化
微信公众号:法纳斯特(ID: walker398)


豆瓣电影TOP250,对于众多爬虫爱好者,应该并不陌生。


很多人都会以此作为第一个练手的小项目。


当然这也多亏了豆瓣的包容,没有加以太多的反爬措施,对新手比较友好。


本期通过Scrapy框架,对豆瓣电影TOP250信息进行爬取。


同时对获取的数据进行可视化分析,给大家带来一个不一样的TOP250。



/ 01 / Scrapy


之前了解了pyspider框架的使用,但是就它而言,只能应用于一些简单的爬取。


对于反爬程度高的网站,它就显得力不从心。


那么就轮到Scrapy上场了,目前Python中使用最广泛的爬虫框架。


当然目前我学习的都是简单爬虫,上述内容都是道听途说,并不是切身体会。


Scrapy的安装相对复杂,依赖的库较多。


不过通过度娘,最后我是成功安装了的。放在C盘,如今我的C盘要爆炸。


首先任意文件夹下命令行运行scrapy startproject doubanTop250,创建一个名为doubanTop250的文件夹。


然后在文件夹下的py文件中改写程序。


进入文件夹里,命令行运行scrapy genspider douban movie.douban.com/top250。


最后会生成一个douban.py文件,Scrapy用它来从网页里抓取内容,并解析抓取结果。


最终修改程序如下。


 
 

import scrapy
from scrapy import Spider
from doubanTop250.items import Doubantop250Item


class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = ['https://movie.douban.com/top250/']

    def parse(self, response):
        lis = response.css('.info')
        for li in lis:
            item = Doubantop250Item()
            # 利用CSS选择器获取信息
            name = li.css('.hd span::text').extract()
            title = ''.join(name)
            info = li.css('p::text').extract()[1].replace('\n', '').strip()
            score = li.css('.rating_num::text').extract_first()
            people = li.css('.star span::text').extract()[1]
            words = li.css('.inq::text').extract_first()
            # 生成字典
            item['title'] = title
            item['info'] = info
            item['score'] = score
            item['people'] = people
            item['words'] = words
            yield item

        # 获取下一页链接,并进入下一页
        next = response.css('.next a::attr(href)').extract_first()
        if next:
            url = response.urljoin(next)
            yield scrapy.Request(url=url, callback=self.parse)
        pass


生成的items.py文件,是保存爬取数据的容器,代码修改如下。


 
 

import scrapy


class Doubantop250Item(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    info = scrapy.Field()
    score = scrapy.Field()
    people = scrapy.Field()
    words = scrapy.Field()
    pass


在这个之后,还需要在settings.py文件添加用户代理和请求延时。


最后在douban.py所在文件夹下打开命令行,输入scrapy crawl douban。


命令行就会显示获取的结果啦!!!



这里豆瓣的信息有Unicode编码,我也不知为何要在一个网页里设置两种编码。


在当前文件夹命令行运行scrapy crawl douban -o douban.csv,即可输出csv文件。


由于在处理的时候没有去除空格,造成有两种编码存在,无法通过Excel查看。


这里就贴一个文本文档,后续会在数据可视化里去除Unicode编码。




/ 02 / 数据可视化


01 电影上映年份分布



这里可以看出豆瓣电影TOP250里,电影的上映年份,多分布于80年代以后。


其中有好几年是在10部及以上的。


02 中外电影上映年份分布



明显感受到了国产电影和国外电影的差距,90年代还行,还能过过招。


越往后,国产电影就基本就没有上榜的。


每年电影出得倒是不少,真正质量好的又能有几部呢?


今天刚好看到新周刊的推文「2018年10大烂片」。


影评人周黎明:如果一部影片既没有表达,也没有最基本的技术水准,那应该是最彻底的烂片。


讲道理,国产烂片还真不少...


03 中外电影评分情况



通过上张图,我们知道国外电影是占据了榜单的大多数。


不过这里评分情况,倒是倍感欣慰,说明国产电影中的精品也不错,和国外电影并没有太大的差距。


只是这些影片貌似有点老了...


04 电影数TOP10



美国遥遥领先,中国位居其中。


在我的那篇「2018年电影分析」中,中国目前可是个电影高产国,结果呢...


香港都比内地的多。这里不得不佩服90,00年代的香港影业,确实很强!


05 电影评分分布



大多分布于「8.5」到「9.2」之间。最低「8.3」,最高「9.6」。


06 评论人数TOP10



让我们来看看人气最高的有哪些影片,你又看过几部呢?


记得上学的时候,时间多。我根据IMDbTOP250,看了榜上大部分的电影。


于是乎豆瓣电影这个TOP10,我也全看过了,都是一些有故事的电影。


07 排名评分人数三维度



总的来说,排名越靠前,评价人数越多,并且分数也越高。


08 年份评分人数三维度



这里就更加明显看出榜单上电影分布情况,大部分都是80年代以后的。


在90年代有个小高峰,不仅评价高,人气还高。


往后的数据就相对平稳,变化不是太大。


09 电影类型图



和我之前「2018年电影分析」比较一下,发现榜单里「动作」片减少不少,其他差别不大。


这算不算是间接说明国人更喜欢视觉上的东西呢?



/ 03 / 总结


本次只是一个简单的Scrapy操作,目的就是简单了解一下它的使用。


以后或许会更深入去学习Scrapy框架,所以慢慢等小F填坑吧!


阅读原文,代码都放「GitHub」上头了。

点击阅读原文,跳转至Github


文末点个赞,比心!!!


Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

关注后在公众号内回复“课程”即可获取:

小编的转行入职数据科学(数据分析挖掘/机器学习方向)【最新免费】

小编的Python入门免费视频课程!!!

小编的Python快速上手matplotlib可视化库!!!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python数据可视化:豆瓣电影TOP250 的相关文章

  • 使用fiddle抓包使用教程

    Fiddler是什么 Fiddler是一个http调试代理 它能 够记录所有的你电脑和互联网之间的http通讯 Fiddler 可以也可以让你检查所有的http通讯 设置断点 以及Fiddle 所有的 进出 的数据 指cookie html
  • 如何在css文件中使用本地ttf/woff/woff2字体?

    如何在css文件中使用本地ttf woff woff2字体 1 首先下载ttf woff woff2字体文件 免费的字体文件可以上阿里矢量图库进行下载 不过数量很少 2 在css文件中配置相应代码 font face font family
  • 关于IBM MQ6.0与MQ8.0的通信问题

    国庆之后 负责的一个项目突然出现了问题 描述问题 在网络 业务 业务量都没有增长的情况下 MQ8的批量发送通道突然就挂掉了 变成retrying状态了 消息全都堵在传输队列里了 死信队列无消息 实时通道正常 排除网络原因导致的通道问题 采取
  • Cannot declare class app\home\controller\Cases because the name is already in use

    Cannot declare class app home controller Cases because the name is already in use 命名空间冲突了 use 模型类的时候使用as别名 同一个页面上 命名空间不同
  • MyBatis-Plus主键生成策略

    主键生成策略 MyBatis Plus默认实现5种主键生成策略 分别是 AUTO 配合数据库设置自增主键 可以实现主键的自动增长 类型为nmber INPUT 由用户输入 NONE 不设置 等同于INPUT ASSIGN ID 只有当用户未
  • 常见git报错问题

    1 windows使用git时出现 warning LF will be replaced by CRLF windows中的换行符为 CRLF 而在linux下的换行符为LF 所以在执行add 时出现提示 解决办法 rm rf git 删
  • FreeRTOS实时操作系统(三)任务挂起与恢复

    系列文章 FreeRTOS实时操作系统 一 RTOS的基本概念 FreeRTOS实时操作系统 二 任务创建与任务删除 HAL库 FreeRTOS实时操作系统 三 任务挂起与恢复 FreeRTOS实时操作系统 四 中断任务管理 FreeRTO
  • 将springboot的项目打包成jar部署

    一 在项目的配置文件pom xml下导入
  • 数学建模十大算法01-蒙特卡洛算法(Monte Carlo)

    文章目录 一 生成随机数 1 1 rand 1 2 unifrnd 1 3 联系与区别 二 引入 2 1 引例 2 2 基本思想 2 3 优缺点 三 实例 3 1 蒙特卡洛求解积分 3 2 简单的实例 3 3 书店买书 0 1规划问题 3
  • Java IO流 缓冲流-BufferedInputStream、BufferedOutputStream

    首先抛出一个问题 有了InputStream为什么还要有BufferedInputStream BufferedInputStream和BufferedOutputStream这两个类分别是FilterInputStream和FilterO
  • 将Python脚本编译为so文件的方法,并实现调用

    本文以Linux系统 Ubuntu 为例 讲解如何将自己的Python程序 py文件 加密为 so文件 1 安装必要的工具 首先 我们需要在Ubuntu系统中安装一些准备工具 包括python3 dev gcc Cython 其中Cytho
  • lua环境搭建数据类型

    lua作为一门计算机语言 从语法角度个人感觉还是挺简洁的接下来我们从0开始学习lua语言 1 首先我们需要下载lua开发工具包 在这里我们使用的工具是luadist 下载链接为 https luadist org repository 下载
  • 2023年每天都投递很多份简历,但都石沉大海,我还投吗?测试人该何去何从?

    各大互联网公司的接连裁员 政策限制的行业接连消失 让今年的求职雪上加霜 想躺平却没有资本 还有人说软件测试岗位饱和了 对此很多求职者深信不疑 因为投出去的简历回复的越来越少了 另一面企业招人真的变得容易了吗 有企业HR吐槽 简历确实比以前多
  • 销售、售前、项目实施不同的培训要求

    产品部门对于不同的岗位 培训要有不同的针对性 不能搞一刀切 针对销售部门 培训的要求和考核的要求 知其然 即知道产品的功能 性能 优势 针对售前部门 培训的要求和考核的要求 知其然 知起所以然 即要知道产品的 然 更要知道 然 从何来 优势
  • Linux操作系统的题目联系及解析

    一 创建文件命令练习 1 在 目录下创建一个临时目录test 这个比较基础 就是考创建 利用mkdir就能完成 如 2 在临时目录test下创建五个文件 文件名分别为passwd group bashrc profile sshd conf
  • 如何判断网页是否使用了Ajax

    方法一 一次AJAX请求头如下 一次普通get请求如下 方法2 使用JS插件查看是不是异步加载 方法3
  • 操作系统中的作业、程序、进程

    作业 作业是用户向计算机提交任务的任务实体 是要求计算机系统所做工作的集合 在用户向计算机提交作业后 系统将它放入外存中的作业等待队列中等待执行 它包括程序 数据及其作业说明书 程序 程序是为解决一个信息处理任务而预先编制的工作执行方案 是
  • 最热门的大数据技术

    大数据已经融入到各行各业 哪些大数据技术是最受欢迎 哪些大数据技术潜力巨大 对10个最热门的大数据技术的介绍 一 预测分析 预测分析是一种统计或数据挖掘解决方案 包含可在结构化和非结构化数据中使用以确定未来结果的算法和技术 可为预测 优化
  • LeetCode 2391. 收集垃圾的最少总时间

    给你一个下标从 0 开始的字符串数组 garbage 其中 garbage i 表示第 i 个房子的垃圾集合 garbage i 只包含字符 M P 和 G 但可能包含多个相同字符 每个字符分别表示一单位的金属 纸和玻璃 垃圾车收拾 一 单
  • Qt离线安装MSVC方法

    安装好Qt后 有时候需要用到MSVC编译环境 如果电脑连接了互联网 直接下载安装器在线安装即可 那么需要为没有联网的电脑安装MSVC时 就需要采用下载离线安装包 离线安装的方法 MSVC安装器下载地址 MSVC2019 https visu

随机推荐

  • MTCNN代码解读

    首先了解MTCNN算法 理论基础 正如上图所示 该MTCNN由3个网络结构组成 P Net R Net O Net Proposal Network P Net 该网络结构主要获得了人脸区域的候选窗口和边界框的回归向量 并用该边界框做回归
  • Apache和Nginx虚拟机的配置方法+跨域知识点整理

    Apache的配置 ip 创建虚拟主机目录 新建测试页面 修改主配置文件 root hya vim etc httpd conf httpd conf 在主配置文件的最下面添加
  • Vue3优雅地监听localStorage变化

    目录 前言 为什么要这样做 思路 实现 实现中介者模式 重写localStorage 实现useStorage hook 测试 使用localStorage 监听localStorage变化 结果 前言 最近在研究框架 也仔细用了Vue3一
  • 搜索引擎使用技巧详解

    说到搜索 这可能是我们每个网民每天都要用到的操作 这个操作看起来很简单 一般用户都是想搜什么就输入什么 然后一按搜索就直接开始 这是最简单最快速的方法 但可能并不是最有效的方法 要想搜索结果最合乎你的意愿 IT 之家建议你掌握如下 8 个技
  • 第十三课,深度测试

    开启深度测试 glEnable GL DEPTH TEST 清除深度缓存 glClear GL COLOR BUFFER BIT GL DEPTH BUFFER BIT 深度测试函数 OpenGL允许我们禁用深度缓冲的写入 只需要设置它的深
  • xshell无法连接vmware虚拟机

    一 问题描述 本机使用Xshell无法连接VMware中的虚拟机 并且从本机也无法ping通虚拟机 虚拟机也无法ping通本机物理机 二 环境 场景 物理机 windows10系统 Xshell 6 VMware Workstation 1
  • linux 下的 iptables/ netfilter 防火墙 深度理解 前篇

    一 概述 iptables 其实不是真正的防火墙 我们可以把它理解为一个客户端代理 用户通过iptables 这个代理 将用户的安全设置执行到对应的 安全框架 中 这个安全框架才是真正的防火墙 这个框架的名称叫做netfilter 二 五链
  • 服务器虚拟化导出快照,ESXi5 PACS服务器虚拟化系统快照数据恢复

    杭州某国有企业 一台ESXi5 1 虚拟化系统中运行一重要的PACS服务的虚拟机 因为之前做了快照 管理员在误还原快照后 数据回到3个月前 数据很重要 管理员在尝试多种方式后 也无法补救数据 后通过集成商介绍 联系到了北京安数云和科技 北京
  • sklearn K近邻KNeighborsClassifier参数详解

    原文网址 https scikit learn org stable modules generated sklearn neighbors KNeighborsClassifier html class sklearn neighbors
  • 项目中的STL经验

    STL是c 非常重要的一部分 它是很多大神的杰作 高效 稳定 可扩展性好 虽然STL确实存在难以调试 内存碎片的问题 现在机器的内存越来越大 内存碎片的问题基本不太可能成为系统瓶颈 但只要你使用恰当 它能显著提高生产力 并使代码更短 更易维
  • 五大常用经典算法

    五大常用算法之一 分治算法 一 基本概念 在计算机科学中 分治法是一种很重要的算法 字面上的解释是 分而治之 就是把一个复杂的问题分成两个或更多的相同或相似的子问题 再把子问题分成更小的子问题 直到最后子问题可以简单的直接求解 原问题的解即
  • 【UE4】搭建局域网内VR直播 UE4.27

    前言 英伟达显卡 UE4 27的内网搭建360 相机直播 并在内网任意设备使用VR观看 理论上性能足够效果越好 此处使用的VR设备为Vive 梳理了整体构建流程 希望能帮到你 多图警告 图片教程比较直观 1 准备工作 下载UE和OBS所需安
  • 代码走查和代码审查_代码审查随时间而变化

    代码走查和代码审查 我们已经进行了大约4年的代码审查 代码审查入门 从一开始 开发人员就会互相帮助 在有人询问时查看代码 或者有时主管或高级开发人员会介入并检查代码 如果我们发现测试存在问题 或者是否有人刚刚加入团队并且我们期望他们需要一些
  • android 透明状态栏方法及其适配键盘上推(二)

    在上一篇文章中介绍了一种设置透明状态栏及其适配键盘上推得方法 但是上一篇介绍的方法中有个缺点 就是不能消除掉statusbar的阴影 很多手机如 三星 Nexus都带有阴影 即使我用了
  • GD32F303调试小记(五)之ADC+DMA+硬件过采样

    前言 单片机的大多数的功能都是基于数字信号去控制的 然而许多的场合下 我们也需要有模拟信号的参与 因为许多变量的控制是需要连续的而非阶跃式的 常见的若想得到电压值 温度值 电流值等等都需要用到A D转换 如果外围器件不是特定IC而是自己搭的
  • Mask R-CNN详解

    一 Mask R CNN网络介绍 Mask R CNN是何凯明2017年提出的一个实例分割 Instance segmentation 算法 可以用来做 目标检测 目标实例分割 目标关键点检测 是ICCV2017的best paper Ma
  • 小科普

    买固态硬盘 我们会比较关注颗粒寿命 机械硬盘虽然几乎不用考虑长寿与否 除了考虑SMR PMR记录方式外 最怕的其实就是坏 盘一挂数据未必能找回来 所以其故障率指标就显得尤为重要 各种寿命指标 那这个指标一般就是MTBF了 全称平均无故障间隔
  • 文件传输协议FTP与TCP/IP协议之间有什么关系

    TCP IP协议是目前网络所采用的一种框架协议 包括五层 应用层 传输层 网络层 链路层 物理层 FTP协议是TCP IP协议的一部分 严格意义上来说是应用层协议 FTP是一种应用程序 基于TCP IP协议 它定义了本地登录户机与远程服务器
  • Verilog HDL运算符

    一 逻辑运算符 逻辑与 逻辑或 逻辑非 二 关系运算符 逻辑相等 逻辑不等 全等 不全等 和 可以比较含有x和z的操作数 在模块的功能仿真中有着广泛的应用 三 位运算符 非 与 或 异或 同或 四 拼接运算符 s1 s2 sn 五 一元约简
  • Python数据可视化:豆瓣电影TOP250

    欢迎关注天善智能 我们是专注于商业智能BI 人工智能AI 大数据分析与挖掘领域的垂直社区 学习 问答 求职一站式搞定 对商业智能BI 大数据分析挖掘 机器学习 python R等数据领域感兴趣的同学加微信 tstoutiao 邀请你进入数据