豆瓣電影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。
命令行就會顯示獲取的結果啦!!!
這裏豆瓣的信息有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」上頭了。
文末點個贊,比心!!!
··· END ···