Python數據可視化:豆瓣電影TOP250

圖片


豆瓣電影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 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。


命令行就會顯示獲取的結果啦!!!


image.png


這裏豆瓣的信息有Unicode編碼,我也不知爲什麼要在一個網頁裏設置兩種編碼。


在當前文件夾命令行運行scrapy crawl douban -o douban.csv,便可輸出csv文件。


因爲在處理的時候沒有去除空格,形成有兩種編碼存在,沒法經過Excel查看。


這裏就貼一個文本文檔,後續會在數據可視化裏去除Unicode編碼。


image.png



/ 02 / 數據可視化


01 電影上映年份分佈


image.png


這裏能夠看出豆瓣電影TOP250裏,電影的上映年份,多分佈於80年代之後。


其中有好幾年是在10部及以上的。


02 中外電影上映年份分佈


image.png


明顯感覺到了國產電影和國外電影的差距,90年代還行,還能過過招。


越日後,國產電影就基本就沒有上榜的。


每一年電影出得卻是很多,真正質量好的又能有幾部呢?


今天恰好看到新週刊的推文「2018年10大爛片」。


影評人週黎明:若是一部影片既沒有表達,也沒有最基本的技術水準,那應該是最完全的爛片。


講道理,國產爛片還真很多...


03 中外電影評分狀況


image.png


經過上張圖,咱們知道國外電影是佔據了榜單的大多數。


不過這裏評分狀況,卻是倍感欣慰,說明國產電影中的精品也不錯,和國外電影並無太大的差距。


只是這些影片貌似有點老了...


04 電影數TOP10


image.png


美國遙遙領先,中國位居其中。


在個人那篇「2018年電影分析」中,中國目前但是個電影高產國,結果呢...


香港都比內地的多。這裏不得不佩服90,00年代的香港影業,確實很強!


05 電影評分分佈


image.png


大多分佈於「8.5」到「9.2」之間。最低「8.3」,最高「9.6」。


06 評論人數TOP10


image.png


讓咱們來看看人氣最高的有哪些影片,你又看過幾部呢?


記得上學的時候,時間多。我根據IMDbTOP250,看了榜上大部分的電影。


因而乎豆瓣電影這個TOP10,我也全看過了,都是一些有故事的電影。


07 排名評分人數三維度


image.png


總的來講,排名越靠前,評價人數越多,而且分數也越高。


08 年份評分人數三維度


image.png


這裏就更加明顯看出榜單上電影分佈狀況,大部分都是80年代之後的。


在90年代有個小高峯,不只評價高,人氣還高。


日後的數據就相對平穩,變化不是太大。


09 電影類型圖


image.png


和我以前2018年電影分析比較一下,發現榜單裏「動做」片減小很多,其餘差異不大。


這算不算是間接說明國人更喜歡視覺上的東西呢?



/ 03 / 總結


本次只是一個簡單的Scrapy操做,目的就是簡單瞭解一下它的使用。


之後或許會更深刻去學習Scrapy框架,因此慢慢等小F填坑吧!


閱讀原文,代碼都放「GitHub」上頭了。


文末點個贊,比心!!!





···  END  ···


image.png

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息