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

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

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

本期通过Scrapy框架,对豆瓣电影TO戛纳电影节P250信息进行爬取。

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

/ 01 / Scrapy

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

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

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

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

Scrapy的安装相对复杂,戛纳电影节依赖的库较多。

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

首先任意文件夹下命令行运行scrapy startproject doubanTop250,创建一个名为doubanTo戛纳电影节p250的文件夹。

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

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

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

最终修改程序如下。

import

 scrapy

from scrapy import

 Spider

from doubanTop250.items imp戛纳电影节ort

 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

li戛纳电影节s:

            item = Doubantop250Item()

            # 利用CSS选择器获取信息            name = li.css(.hd span::text

).extract()

            title = .join(name)

i戛纳电影节nfo = li.css(p::text).extract()[1].replace(\n

, ).strip()

            score = li.css(.rating_num::text

).extract_fi戛纳电影节rst()

            people = li.css(.star span::text).extract()[1

]

            words = li.css(.inq::text

).extract_first()

            # 生成字典i戛纳电影节tem[title

] = title

            item[info

] = info

            item[score

] = score

            item[people

] = people

            item[words

] = words

            yield

i戛纳电影节tem

        # 获取下一页链接,并进入下一页        next = response.css(.next a::attr(href)

).extract_first()

        if

 next:

url = response.url戛纳电影节join(next)

            yield

 scrapy.Request(url=url, callback=self.parse)

        pass

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

impor戛纳电影节t

 scrapy

class Doubantop250Item(scrapy.Item):    # define the fields for your item here like:    # name = scrap戛纳电影节y.Field()

    title = scrapy.Field()

    info = scrapy.Field()

    score = scrapy.Field()

    people = scrapy.Field()

wor戛纳电影节ds = scrapy.Field()

    pass

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

最后在douban.py所在文件夹下打开命令行,输入scrapy crawl dou戛纳电影节ban。

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

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

在当前文件夹命令行运行scrapy crawl douban -o douban.c戛纳电影节sv,即可输出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」上头了。

文末点个赞,比心!!!

推荐阅读

···  END  ···