python 豆瓣电影top250_Python数据可视化:豆瓣电影TOP250

7e549b6dcc7541797192d0481515e014.png

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

不少人都会以此做为第一个练手的小项目。框架

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

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

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

/ 01 / Scrapy学习

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

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

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

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

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。

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

81ed98bf40780a304b49d8f5ecb07724.png

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

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

因为在处理的时候没有去除空格,形成有两种编码存在,没法经过Excel查看。

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

e91af7182c0a9cb4bfd2364610b53784.png

/ 02 / 数据可视化

01 电影上映年份分布

12ffaf06e16a367c7ae011ab64d76a3c.png

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

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

02 中外电影上映年份分布

cb0f150d653a7f0fe39c190eaa7fd066.png

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

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

每一年电影出得却是很多,真正质量好的又能有几部呢?

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

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

讲道理,国产烂片还真很多...

03 中外电影评分状况

954b0891d49da3aa8ca974d23846d05d.png

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

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

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

04 电影数TOP10

555be94302e6c56ec864022e4bf9d2f9.png

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

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

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

05 电影评分分布

fd39c3829d116120c44084f9e1c33ba9.png

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

06 评论人数TOP10

d5dd0108c68db737c35fecb01d562fcb.png

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

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

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

07 排名评分人数三维度

bcda5efa9371004f33cdf9bfe0b65678.png

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

08 年份评分人数三维度

dc8a5491fa745347e539babd5d3e8384.png

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

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

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

09 电影类型图

69ad0e2a4ecd502866d9232aa0cecde3.png

和我以前「2018年电影分析」比较一下,发现榜单里「动做」片减小很多,其余差异不大。

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

/ 03 / 总结

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

之后或许会更深刻去学习Scrapy框架,因此慢慢等小F填坑吧!

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

文末点个赞,比心!!!

···  END  ···

ba7dd1d6091b4f488d0972fc.html

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值