Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架。 可以應(yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。Scrapy的一個(gè)最主要的優(yōu)勢: 請求(request)是被異步調(diào)度和處理的。 這意味著,Scrapy并不需要等待一個(gè)請求(request)完成及處理,在此同時(shí), 也發(fā)送其他請求或者做些其他事情。 這也意味著,當(dāng)有些請求失敗或者處理過程中出現(xiàn)錯(cuò)誤時(shí),其他的請求也能繼續(xù)處理。在允許您可以以非??斓乃俣冗M(jìn)行爬取時(shí)(以容忍錯(cuò)誤的方式同時(shí)發(fā)送多個(gè)request), Scrapy也通過 一些設(shè)置來允許您控制其爬取的方式。 例如,您可以為兩個(gè)request之間設(shè)置下載延遲, 限制單域名(domain)或單個(gè)IP的并發(fā)請求量,甚至可以 使用自動(dòng)限制插件 來自動(dòng)處理這些問題。
scrapy項(xiàng)目創(chuàng)建及目錄結(jié)構(gòu)
在開始爬取之前,您必須創(chuàng)建一個(gè)新的Scrapy項(xiàng)目。 進(jìn)入您打算存儲(chǔ)代碼的目錄中,運(yùn)行下列命令:scrapy startproject projectname

在文件夾內(nèi)可以看到該項(xiàng)目的目錄結(jié)構(gòu)

我們可以看到這里生成了一個(gè)與項(xiàng)目名稱同名的文件夾,該文件夾下有一個(gè)同名文件夾和一個(gè)scrapy.cfg文件。
- 同名文件夾放置爬蟲項(xiàng)目核心代碼
-
__init__.py為項(xiàng)目的初始化文件,主要寫的是一些項(xiàng)目的初始化信息。 -
items.py定義我們要爬取信息的數(shù)據(jù)容器,相當(dāng)于java的類。 -
middlewares.pySpider中間件,在這個(gè)文件里我們可以定義相關(guān)的方法,用以處理蜘蛛的響應(yīng)輸入和請求輸出。 -
pipelines.py要啟用此文件的話必須要在settings.py里配置一下ITEM_PIPELINES,主要為對數(shù)據(jù)的進(jìn)一步加工和處理,例如將數(shù)據(jù)保存為json,csv文件,或者保存到數(shù)據(jù)庫中等等。 -
settings.py這是本項(xiàng)目的配置文件,里面注釋著很多常用的配置項(xiàng),我們通過在其他文件中引入本文件的方式來使用這些配置項(xiàng)。
-
- scrapy.cfg為爬蟲項(xiàng)目的配置文件
使用項(xiàng)目命令genspider創(chuàng)建Spider
根據(jù)創(chuàng)建項(xiàng)目時(shí)命令行提示進(jìn)入項(xiàng)目文件夾內(nèi),運(yùn)行scrapy genspider example example.com
這里要提到scrapy的命令,它分為全局命令和項(xiàng)目命令,使用scrapy <command> -h可以查看詳細(xì)的命令信息
- 全局命令
-
fetch主要來顯示爬蟲爬取的過程,用法scrapy fetch http://www.baidu.com。如果在scrapy目錄之外使用該命令,會(huì)調(diào)用默認(rèn)的爬蟲來進(jìn)行網(wǎng)頁爬取。如果在scrapy某個(gè)項(xiàng)目目錄內(nèi)使用該命令,則會(huì)調(diào)用該項(xiàng)目中的爬蟲進(jìn)行網(wǎng)頁的爬取 -
runspider可以實(shí)現(xiàn)不依托scrapy的爬蟲項(xiàng)目直接運(yùn)行一個(gè)爬蟲文件 -
settings查看scrapy對應(yīng)的配置信息,項(xiàng)目內(nèi)查看項(xiàng)目的配置信息,項(xiàng)目目錄外查看是scrapy默認(rèn)配置信息 -
shell可以啟動(dòng)scrapy的交互終端。它可以在不啟動(dòng)scrapy爬蟲的情況下,對網(wǎng)站響應(yīng)進(jìn)行調(diào)試。比如xpath或者css提取內(nèi)容,可以現(xiàn)在這里調(diào)試成功后再寫入到item中。 -
startproject創(chuàng)建項(xiàng)目 -
version顯示scrapy的版本信息 -
view實(shí)現(xiàn)下載某個(gè)網(wǎng)頁并用瀏覽器查看
-
- 項(xiàng)目命令
-bench測試本地硬件的性能
-genspider創(chuàng)建scrapy爬蟲文件
-check實(shí)現(xiàn)對某個(gè)爬蟲文件進(jìn)行合同檢查。爬蟲的測試比較麻煩,所以在scrapy中使用合同(contract)的方式對爬蟲進(jìn)行測試
-crawl啟動(dòng)爬蟲,格式為scrapy crawl 爬蟲名
-list列出當(dāng)前可用的爬蟲文件
-edit可以直接打開編輯器對爬蟲文件進(jìn)行編輯
-parse實(shí)現(xiàn)獲取指定的url網(wǎng)址,并使用對應(yīng)的爬蟲文件進(jìn)行處理和分析