python爬虫数据可视化豆瓣评分top250_Python数据可视化:豆瓣电影TOP250
原標(biāo)題:Python數(shù)據(jù)可視化:豆瓣電影TOP250
源 /法納斯特文 /小F
本文轉(zhuǎn)載自「法納斯特」
搜索「walker398」即可關(guān)注
豆瓣電影TOP250,對(duì)于眾多爬蟲愛(ài)好者,應(yīng)該并不陌生。
很多人都會(huì)以此作為第一個(gè)練手的小項(xiàng)目。
當(dāng)然這也多虧了豆瓣的包容,沒(méi)有加以太多的反爬措施,對(duì)新手比較友好。
本期通過(guò)Scrapy框架,對(duì)豆瓣電影TOP250信息進(jìn)行爬取。
同時(shí)對(duì)獲取的數(shù)據(jù)進(jìn)行可視化分析,給大家?guī)?lái)一個(gè)不一樣的TOP250。
/ 01 / Scrapy
之前了解了pyspider框架的使用,但是就它而言,只能應(yīng)用于一些簡(jiǎn)單的爬取。
對(duì)于反爬程度高的網(wǎng)站,它就顯得力不從心。
那么就輪到Scrapy上場(chǎng)了,目前Python中使用最廣泛的爬蟲框架。
當(dāng)然目前我學(xué)習(xí)的都是簡(jiǎn)單爬蟲,上述內(nèi)容都是道聽途說(shuō),并不是切身體會(huì)。
Scrapy的安裝相對(duì)復(fù)雜,依賴的庫(kù)較多。
不過(guò)通過(guò)度娘,最后我是成功安裝了的。放在C盤,如今我的C盤要爆炸。
首先任意文件夾下命令行運(yùn)行scrapy startproject doubanTop250,創(chuàng)建一個(gè)名為doubanTop250的文件夾。
然后在文件夾下的py文件中改寫程序。
進(jìn)入文件夾里,命令行運(yùn)行scrapy genspider douban movie.douban.com/top250。
最后會(huì)生成一個(gè)douban.py文件,Scrapy用它來(lái)從網(wǎng)頁(yè)里抓取內(nèi)容,并解析抓取結(jié)果。
最終修改程序如下。
importscrapy
fromscrapy importSpider
fromdoubanTop250.items importDoubantop250Item
classDoubanSpider(scrapy.Spider):
name = 'douban'
allowed_domains = ['douban.com']
start_urls = ['https://movie.douban.com/top250/']
defparse(self, response):
lis = response.css('.info')
forli inlis:
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
yielditem
# 獲取下一頁(yè)鏈接,并進(jìn)入下一頁(yè)
next = response.css('.next a::attr(href)').extract_first()
ifnext:
url = response.urljoin(next)
yieldscrapy.Request(url=url, callback=self.parse)
pass
生成的items.py文件,是保存爬取數(shù)據(jù)的容器,代碼修改如下。
importscrapy
classDoubantop250Item(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
在這個(gè)之后,還需要在settings.py文件添加用戶代理和請(qǐng)求延時(shí)。
最后在douban.py所在文件夾下打開命令行,輸入scrapy crawl douban。
命令行就會(huì)顯示獲取的結(jié)果啦!!!
這里豆瓣的信息有Unicode編碼,我也不知為何要在一個(gè)網(wǎng)頁(yè)里設(shè)置兩種編碼。
在當(dāng)前文件夾命令行運(yùn)行scrapy crawl douban -o douban.csv,即可輸出csv文件。
由于在處理的時(shí)候沒(méi)有去除空格,造成有兩種編碼存在,無(wú)法通過(guò)Excel查看。
這里就貼一個(gè)文本文檔,后續(xù)會(huì)在數(shù)據(jù)可視化里去除Unicode編碼。
/ 02 / 數(shù)據(jù)可視化
01 電影上映年份分布
這里可以看出豆瓣電影TOP250里,電影的上映年份,多分布于80年代以后。
其中有好幾年是在10部及以上的。
02 中外電影上映年份分布
明顯感受到了國(guó)產(chǎn)電影和國(guó)外電影的差距,90年代還行,還能過(guò)過(guò)招。
越往后,國(guó)產(chǎn)電影就基本就沒(méi)有上榜的。
每年電影出得倒是不少,真正質(zhì)量好的又能有幾部呢?
今天剛好看到新周刊的推文「2018年10大爛片」。
影評(píng)人周黎明:如果一部影片既沒(méi)有表達(dá),也沒(méi)有最基本的技術(shù)水準(zhǔn),那應(yīng)該是最徹底的爛片。
講道理,國(guó)產(chǎn)爛片還真不少...
03 中外電影評(píng)分情況
通過(guò)上張圖,我們知道國(guó)外電影是占據(jù)了榜單的大多數(shù)。
不過(guò)這里評(píng)分情況,倒是倍感欣慰,說(shuō)明國(guó)產(chǎn)電影中的精品也不錯(cuò),和國(guó)外電影并沒(méi)有太大的差距。
只是這些影片貌似有點(diǎn)老了...
04 電影數(shù)TOP10
美國(guó)遙遙領(lǐng)先,中國(guó)位居其中。
在我的那篇「2018年電影分析」中,中國(guó)目前可是個(gè)電影高產(chǎn)國(guó),結(jié)果呢...
香港都比內(nèi)地的多。這里不得不佩服90,00年代的香港影業(yè),確實(shí)很強(qiáng)!
05 電影評(píng)分分布
大多分布于「8.5」到「9.2」之間。最低「8.3」,最高「9.6」。
06 評(píng)論人數(shù)TOP10
讓我們來(lái)看看人氣最高的有哪些影片,你又看過(guò)幾部呢?
記得上學(xué)的時(shí)候,時(shí)間多。我根據(jù)IMDbTOP250,看了榜上大部分的電影。
于是乎豆瓣電影這個(gè)TOP10,我也全看過(guò)了,都是一些有故事的電影。
07 排名評(píng)分人數(shù)三維度
總的來(lái)說(shuō),排名越靠前,評(píng)價(jià)人數(shù)越多,并且分?jǐn)?shù)也越高。
08 年份評(píng)分人數(shù)三維度
這里就更加明顯看出榜單上電影分布情況,大部分都是80年代以后的。
在90年代有個(gè)小高峰,不僅評(píng)價(jià)高,人氣還高。
往后的數(shù)據(jù)就相對(duì)平穩(wěn),變化不是太大。
09 電影類型圖
和我之前「2018年電影分析」比較一下,發(fā)現(xiàn)榜單里「動(dòng)作」片減少不少,其他差別不大。
這算不算是間接說(shuō)明國(guó)人更喜歡視覺(jué)上的東西呢?
/ 03 / 總結(jié)
本次只是一個(gè)簡(jiǎn)單的Scrapy操作,目的就是簡(jiǎn)單了解一下它的使用。
以后或許會(huì)更深入去學(xué)習(xí)Scrapy框架,所以慢慢等小F填坑吧!
閱讀原文,代碼都放「GitHub」上頭了。
文末點(diǎn)個(gè)贊,比心!!!
··· END ···返回搜狐,查看更多
責(zé)任編輯:
總結(jié)
以上是生活随笔為你收集整理的python爬虫数据可视化豆瓣评分top250_Python数据可视化:豆瓣电影TOP250的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 漂泊的旅途,云淡风轻
- 下一篇: python 某江文学城小说标题爬虫+简