Python爬虫实战,pyecharts模块,Python实现豆瓣电影TOP250数据可视化

Cooci

前言

利用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

电影数TOP10

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

电影评分分布

电影评分分布

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

评论人数TOP10

评论人数TOP10

排名评分人数三维度

排名评分人数三维度

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

年份评分人数三维度

年份评分人数三维度

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

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

电影类型图

电影类型图

与之前的2018比较一下,发现榜单里「动作」片减少不少,其他差别不大

阅读 237

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

372 声望
36 粉丝
0 条评论

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

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