用Python爬取豆瓣電影TOP250分析
/ 01 / 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編碼。
/ 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填坑吧!
本文轉載自微信公眾號【java學習之道】。
爬蟲 python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。