Python爬蟲實戰,pyecharts模塊,Python實現豆瓣電影TOP250數據可視化 前言 開發工具 環境搭建 Scrapy框架 結果 數據可視化

前言

利用Python實現豆瓣電影TOP250數據可視化。廢話不多說。

讓我們愉快地開始吧~

開發工具

Python版本: 3.6.4

相關模塊:

pandas模塊

pyecharts模塊;

以及一些Python自帶的模塊。

環境搭建

安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。

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編碼。

數據可視化

電影上映年份分佈

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

中外電影上映年份分佈

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

中外電影評分情況

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

電影數TOP10

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

電影評分分佈

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

評論人數TOP10

排名評分人數三維度

排名越靠前,評價人數越多,並且分數也越高。

年份評分人數三維度

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

電影類型圖

與之前的2018比較一下,發現榜單裏「動作」片減少不少,其他差別不大

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章