作者:法纳斯特,Python爱好者,专注爬虫,数据分析及可视化
微信公众号:法纳斯特(ID: walker398)
豆瓣电影TOP250,对于众多爬虫爱好者,应该并不陌生。
很多人都会以此作为第一个练手的小项目。
当然这也多亏了豆瓣的包容,没有加以太多的反爬措施,对新手比较友好。
本期通过Scrapy框架,对豆瓣电影TOP250信息进行爬取。
同时对获取的数据进行可视化分析,给大家带来一个不一样的TOP250。
/ 01 / 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编码。
/ 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」上头了。
点击阅读原文,跳转至Github
文末点个赞,比心!!!
Python爱好者社区历史文章大合集 :
Python爱好者社区历史文章列表(每周append更新一次)
福利:文末扫码立刻关注公众号, “Python爱好者社区” ,开始学习Python课程:
关注后在公众号内回复 “ 课程 ” 即可获取 :
小编的转行入职数据科学(数据分析挖掘/机器学习方向) 【最新免费】
小编的Python入门免费视频课程 !!!
小编的Python快速上手matplotlib可视化库!!!
崔老师 爬虫实战案例 免费学习视频。
陈老师 数据分析报告制作 免费学习视频。
玩转大数据分析!Spark2.X+Python 精华实战课程 免费学习视频。
本文由Python爱好者社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。
以上所述就是小编给大家介绍的《Python数据可视化:豆瓣电影TOP250》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 数据可视化豆瓣电影 TOP250
- 编写豆瓣相册下载器(python爬虫)
- Scrapy教程--豆瓣电影图片爬取
- 基于 Pytest 豆瓣自动化测试(一)
- 如何 5 分钟零代码实现豆瓣小组爬虫
- 周志华教授力作,豆瓣10分好评
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。