本文實(shí)例講述了Python利用Scrapy框架爬取豆瓣電影。分享給大家供大家參考,具體如下:
Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。 可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。
通過(guò)Python包管理工具可以很便捷地對(duì)scrapy進(jìn)行安裝,如果在安裝中報(bào)錯(cuò)提示缺少依賴的包,那就通過(guò)pip安裝所缺的包
pip install scrapy
scrapy的組成結(jié)構(gòu)如下圖所示
引擎Scrapy Engine,用于中轉(zhuǎn)調(diào)度其他部分的信號(hào)和數(shù)據(jù)傳遞
調(diào)度器Scheduler,一個(gè)存儲(chǔ)Request的隊(duì)列,引擎將請(qǐng)求的連接發(fā)送給Scheduler,它將請(qǐng)求進(jìn)行排隊(duì),但引擎需要時(shí)再將隊(duì)列中的第一個(gè)請(qǐng)求發(fā)送給引擎
下載器Downloader,引擎將請(qǐng)求Request鏈接發(fā)送給Downloader之后它就從互聯(lián)網(wǎng)上下載相應(yīng)的數(shù)據(jù),并將返回的數(shù)據(jù)Responses交給引擎
爬蟲Spiders,引擎將下載的Responses數(shù)據(jù)交給Spiders進(jìn)行解析,提取我們需要的網(wǎng)頁(yè)信息。如果在解析中發(fā)現(xiàn)有新的所需要的url連接,Spiders會(huì)將鏈接交給引擎存入調(diào)度器
管道Item Pipline,爬蟲會(huì)將頁(yè)面中的數(shù)據(jù)通過(guò)引擎交給管道做進(jìn)一步處理,進(jìn)行過(guò)濾、存儲(chǔ)等操作
下載中間件Downloader Middlewares,自定義擴(kuò)展組件,用于在請(qǐng)求頁(yè)面時(shí)封裝代理、http請(qǐng)求頭等操作
爬蟲中間件Spider Middlewares,用于對(duì)進(jìn)入Spiders的Responses和出去的Requests等數(shù)據(jù)作一些修改
scrapy的工作流程:首先我們將入口url交給spider爬蟲,爬蟲通過(guò)引擎將url放入調(diào)度器,經(jīng)調(diào)度器排隊(duì)之后返回第一個(gè)請(qǐng)求Request,引擎再將請(qǐng)求轉(zhuǎn)交給下載器進(jìn)行下載,下載好的數(shù)據(jù)交給爬蟲進(jìn)行爬取,爬取的數(shù)據(jù)一部分是我們需要的數(shù)據(jù)交給管道進(jìn)行數(shù)據(jù)清洗和存儲(chǔ),還有一部分是新的url連接會(huì)再次交給調(diào)度器,之后再循環(huán)進(jìn)行數(shù)據(jù)爬取
首先在存放項(xiàng)目的文件夾內(nèi)打開命令行,在命令行下輸入scrapy startproject 項(xiàng)目名稱,就會(huì)在當(dāng)前文件夾自動(dòng)創(chuàng)建項(xiàng)目所需的python文件,例如創(chuàng)建一個(gè)爬取豆瓣電影的項(xiàng)目douban,其目錄結(jié)構(gòu)如下:
Db_Project/ scrapy.cfg --項(xiàng)目的配置文件 douban/ --該項(xiàng)目的python模塊目錄,在其中編寫python代碼 __init__.py --python包的初始化文件 items.py --用于定義item數(shù)據(jù)結(jié)構(gòu) pipelines.py --項(xiàng)目中的pipelines文件 settings.py --定義項(xiàng)目的全局設(shè)置,例如下載延遲、并發(fā)量 spiders/ --存放爬蟲代碼的包目錄 __init__.py ...
之后進(jìn)入spiders目錄下輸入scrapy genspider 爬蟲名 域名,就會(huì)生成爬蟲文件douban.py文件,用于之后定義爬蟲的爬取邏輯和正則表達(dá)式等內(nèi)容
scrapy genspider douban movie.douban.com
要爬取的豆瓣電影網(wǎng)址為 https://movie.douban.com/top250,其中的每個(gè)電影如下
我們要爬取其中的序號(hào)、名稱、介紹、星級(jí)、評(píng)論數(shù)、描述這幾個(gè)關(guān)鍵信息,因此需要在管道文件items.py中先定義這幾個(gè)對(duì)象,類似于ORM,通過(guò)scrapy.Field()方法為每個(gè)字段定義一個(gè)數(shù)據(jù)類型
新聞熱點(diǎn)
疑難解答
圖片精選