1 Scrapy 爬蟲框架介紹
Scrapy 安裝
win 平臺(tái):“以管理員身份運(yùn)行” cmd埂蕊,執(zhí)行 pip install scrapy
安裝后小測(cè):執(zhí)行 scrapy -h
Scrapy 爬蟲框架基本信息
Scrapy 是用 Python 實(shí)現(xiàn)的一個(gè)為了爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架忠烛。常應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中母剥。
Scrapy 不是一個(gè)函數(shù)功能庫笙什,而是一個(gè)爬蟲框架。
什么是爬蟲框架?
a) 爬蟲框架是實(shí)現(xiàn)爬蟲功能的一個(gè)軟件結(jié)構(gòu)和功能組件集合定拟。
b) 爬蟲框架是一個(gè)半成品,能夠幫助用戶實(shí)現(xiàn)專業(yè)網(wǎng)絡(luò)爬蟲逗嫡。
2 Scrapy 爬蟲框架解析
在五個(gè)模塊之間青自,數(shù)據(jù)包括用戶提交的爬蟲請(qǐng)求以及從網(wǎng)絡(luò)上獲取的相關(guān)內(nèi)容在這些結(jié)構(gòu)之間進(jìn)行流動(dòng)形成數(shù)據(jù)流。Scrapy 框架包含三條主要的數(shù)據(jù)流路徑驱证。
- 1 Engine 從 spider 處獲得爬取請(qǐng)求(Request)
- 2 Engine 將爬取請(qǐng)求轉(zhuǎn)發(fā)給 scheduler延窜,用于調(diào)度
- 3 Engine 從 Scheduler 處獲得下一個(gè)要爬取的請(qǐng)求
- 4 Engine 將爬取請(qǐng)求通過中間件發(fā)送給 Downloader
- 5 爬取網(wǎng)頁后,Downloader 形成響應(yīng)(Response)通過中間件發(fā)給 Engine
- 6 Engine 將收到的響應(yīng)通過中間件發(fā)送給 Spider 處理
- 7 Spider 處理響應(yīng)后產(chǎn)生爬取項(xiàng)(scraped Item)和新的爬取請(qǐng)求(Requests)給 Engine
8 Engine 將爬取項(xiàng)發(fā)送給 Item Pipeline (框架出口)
9 Engine 將爬取請(qǐng)求發(fā)送給 scheduler
數(shù)據(jù)流的出入口
Engine 控制各模塊數(shù)據(jù)流抹锄,不間斷從 Scheduler 處獲得爬取請(qǐng)求逆瑞,直至請(qǐng)求為空
框架入口:Spider的初始爬取請(qǐng)求
框架出口:Item Pipeline
“5+2” 結(jié)構(gòu):五個(gè)框架的主體部分(模塊),兩個(gè)中間件
- Scrapy Engine (引擎):負(fù)責(zé)其它四個(gè)模塊中間的通訊伙单,信號(hào)获高、數(shù)據(jù)傳遞等。
- Scheduler (調(diào)度器):它負(fù)責(zé)接受引擎發(fā)送過來的 Request 請(qǐng)求吻育,并按照一定的方式進(jìn)行整理排列念秧,入隊(duì),當(dāng)引擎需要時(shí)扫沼,交還給引擎。
- Downloader (下載器):負(fù)責(zé)下載 Engine (引擎)發(fā)送的所有 Requests 請(qǐng)求庄吼,并將其獲取到的 Responses 交還給 Engine (引擎)缎除,由引擎交給 Spider 來處理。
- Spider (爬蟲):它負(fù)責(zé)處理所有 Responses总寻,從中分析提取數(shù)據(jù)器罐,獲取 Item 字段需要的數(shù)據(jù),并將需要跟進(jìn)的 URL 提交給引擎渐行,再次進(jìn)入 Scheduler (調(diào)度器)轰坊。
- Item Pipeline (管道):它負(fù)責(zé)處理 Spider 中獲取到的 Item铸董,并進(jìn)行后期處理(詳細(xì)分析、過濾肴沫、存儲(chǔ)等)的地方粟害。
-
Downloader Middlewares (下載中間件):你可以當(dāng)作是一個(gè)可以自定義擴(kuò)展下載功能的組件。
目的:實(shí)施 Engine颤芬、scheduler 和 Downloader 之間進(jìn)行用戶可配置的控制
功能:修改悲幅、丟棄、新增請(qǐng)求或響應(yīng)
用戶可以編寫配置代碼 -
Spider Middlewares (Spider 中間件):你可以理解為是一個(gè)可以自定擴(kuò)展和操作引擎和 Spider 中間通信的功能組件(比如進(jìn)入 Spider 的 Response 和從 Spider 出去的 Requests)
目的:對(duì)請(qǐng)求和爬取項(xiàng)的再處理
功能:修改站蝠、丟棄汰具、新增請(qǐng)求或爬取項(xiàng)
用戶可以編寫配置代碼
從上述介紹, 我們可以看到框架中的五個(gè)模塊形成了既定的功能, 那么我們重點(diǎn)編寫的是 Spider 模塊和 Item Pipelines 模塊, 用戶為了去操作其中的數(shù)據(jù)流,對(duì)數(shù)據(jù)流進(jìn)行一定的控制, 可以通過兩個(gè)中間件對(duì)其中的 Request、Response 和 Item 做一定的操作菱魔。
Scrapy = Scrach + Python
3 Requests 庫和 Scrapy 爬蟲的比較
相同點(diǎn)∶
a) 兩者都可以進(jìn)行頁面請(qǐng)求和爬取留荔,Python爬蟲的兩個(gè)重要技術(shù)路線
b) 兩者可用性都好,文檔豐富澜倦,入門簡(jiǎn)單
c) 兩者都沒有處理js聚蝶、提交表單、應(yīng)對(duì)驗(yàn)證碼等功能(可擴(kuò)展)
選用哪個(gè)技術(shù)路線開發(fā)爬蟲呢?
- 非常小的需求肥隆,requests 庫
- 不太小的需求既荚,Scrapy 框架
- 定制程度很高的需求(不考慮規(guī)模),自搭框架栋艳,requests > Scrapy
4 Scrapy 爬蟲的常用命令
Scrapy 命令行
Scrapy 是為持續(xù)運(yùn)行設(shè)計(jì)的專業(yè)爬蟲框架恰聘,提供操作的 Scrapy 命令行。win 下吸占,啟動(dòng) cmd 控制臺(tái)
- 為什么 Scrapy 采用命令行創(chuàng)建和運(yùn)行爬蟲?
命令行(不是圖形界面)更容易自動(dòng)化晴叨,適合腳本控制。本質(zhì)上矾屯,Scrapy 是給程序員用的兼蕊,功能(而不是界面)更重要
Scrapy 常用命令