豆瓣电影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 /top250。
最后会生成一个douban.py文件,Scrapy用它来从网页里抓取内容,并解析抓取结果。
最终修改程序以下。
importscrapy
fromscrapyimportSpider
fromdoubanTop250.itemsimportDoubantop250Item
classDoubanSpider(scrapy.Spider):
name='douban'
allowed_domains=['']
start_urls=['/top250/']
defparse(self,response):
lis=response.css('.info')
forliinlis:
item=Doubantop250Item()
#利用CSS选择器获取信息
name=li.css('.hdspan::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('.starspan::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
yielditem
#获取下一页连接,并进入下一页
next=response.css('.nexta::attr(href)').extract_first()
ifnext:
url=response.urljoin(next)
yieldscrapy.Request(url=url,callback=self.parse)
pass
生成的items.py文件,是保存爬取数据的容器,代码修改以下。
importscrapy
classDoubantop250Item(scrapy.Item):
#definethefieldsforyouritemherelike:
#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年代还行,还能过过招。
越日后,国产电影就基本就没有上榜的。
每一年电影出得却是很多,真正质量好的又能有几部呢?
今天恰好看到新周刊的推文「10大烂片」。
影评人周黎明:若是一部影片既没有表达,也没有最基本的技术水准,那应该是最完全的烂片。
讲道理,国产烂片还真很多...
03 中外电影评分状况
经过上张图,咱们知道国外电影是占据了榜单的大多数。
不过这里评分状况,却是倍感欣慰,说明国产电影中的精品也不错,和国外电影并无太大的差距。
只是这些影片貌似有点老了...
04 电影数TOP10
美国遥遥领先,中国位居其中。
在个人那篇「电影分析」中,中国目前但是个电影高产国,结果呢...
香港都比内地的多。这里不得不佩服90,00年代的香港影业,确实很强!
05 电影评分分布
大多分布于「8.5」到「9.2」之间。最低「8.3」,最高「9.6」。
06 评论人数TOP10
让咱们来看看人气最高的有哪些影片,你又看过几部呢?
记得上学的时候,时间多。我根据IMDbTOP250,看了榜上大部分的电影。
因而乎豆瓣电影这个TOP10,我也全看过了,都是一些有故事的电影。
07 排名评分人数三维度
总的来讲,排名越靠前,评价人数越多,而且分数也越高。
08 年份评分人数三维度
这里就更加明显看出榜单上电影分布状况,大部分都是80年代之后的。
在90年代有个小高峰,不只评价高,人气还高。
日后的数据就相对平稳,变化不是太大。
09 电影类型图
和我以前「电影分析」比较一下,发现榜单里「动做」片减小很多,其余差异不大。
这算不算是间接说明国人更喜欢视觉上的东西呢?
/ 03 / 总结
本次只是一个简单的Scrapy操做,目的就是简单了解一下它的使用。
之后或许会更深刻去学习Scrapy框架,因此慢慢等小F填坑吧!
阅读原文,代码都放「GitHub」上头了。
文末点个赞,比心!!!
··· END ···