前言
利用Python实现豆瓣电影TOP250数据可视化。废话不多说。
让我们愉快地开始吧~
开发工具
Python版本: 3.6.4
相关模块:
pandas模块
pyecharts模块;
以及一些Python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
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编码。
数据可视化
电影上映年份分布
这里可以看出豆瓣电影TOP250里,电影的上映年份,多分布于80年代以后。
中外电影上映年份分布
明显感受到了国产电影和国外电影的差距,90年代还行,还能过过招。
中外电影评分情况
通过上张图,我们知道国外电影是占据了榜单的大多数。
电影数TOP10
美国遥遥领先,中国位居其中。
电影评分分布
大多分布于「8.5」到「9.2」之间。最低「8.3」,最高「9.6」。
评论人数TOP10
排名评分人数三维度
排名越靠前,评价人数越多,并且分数也越高。
年份评分人数三维度
这里就更加明显看出榜单上电影分布情况,大部分都是80年代以后的。
电影类型图
与之前的2018比较一下,发现榜单里「动作」片减少不少,其他差别不大