前言
利用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比較一下,發現榜單裏「動作」片減少不少,其他差別不大