通過(guò)這篇文章,我們會(huì)了解scrapy的命令行工具。
文章介紹命令行工具的順序基本就是按照官方文檔的順序來(lái)。
命令
scrapy的命令分為全局命令和項(xiàng)目?jī)?nèi)命令。全局命令也就是不需要在項(xiàng)目所在目錄下運(yùn)行,項(xiàng)目?jī)?nèi)命令必須在生成項(xiàng)目后,在此目錄下運(yùn)行的命令。舉個(gè)栗子,startproject就是全局命令,因?yàn)樵谶\(yùn)行這個(gè)命令的時(shí)候還沒(méi)有項(xiàng)目,check就是項(xiàng)目?jī)?nèi)命令,因?yàn)楸仨氂许?xiàng)目才能檢查代碼正確與否。
Global commands:
- startproject
- genspider
- settings
- runspider
- shell
- fetch
- view
- version
Project-only commands:
- crawl
- check
- list
- edit
- parse
- bench
創(chuàng)建項(xiàng)目
命令:
scrapy startproject testproject
這個(gè)命令用于生成我們所需要的爬蟲(chóng)項(xiàng)目。進(jìn)入到該目錄中,會(huì)發(fā)現(xiàn)生成了許多文件。這些文件的用法在以后都會(huì)一一詳解。

生成spider
命令:
scrapy genspider baidu www.baidu.com
輸入該命令會(huì)在spiders文件夾下生成一個(gè)名為 baidu.py 的文件,cat這個(gè)文件,我們會(huì)發(fā)現(xiàn)其實(shí)就是最基本的spider模板。

模板選擇
在終端輸入命令可以查看生成模板的類(lèi)型:
scrapy genspider -l
輸出:
Available templates:
basic
crawl
csvfeed
xmlfeed
也就是系統(tǒng)自帶這四種模板,如果沒(méi)有指定模板,會(huì)選擇basic基本模板。如果你問(wèn)我可以自定義模板嗎,當(dāng)然可以了,不過(guò)本文暫時(shí)不涉及這個(gè)問(wèn)題,如果有需要可以先自行g(shù)oogle。
使用模板命令:
scrapy genspider -t xmlfeed zhihu www.zhihu.com
-t就是TEMPLATE,也就是模板。
例子:
$ scrapy genspider -l
Available templates:
basic
crawl
csvfeed
xmlfeed
$ scrapy genspider example example.com
Created spider 'example' using template 'basic'
$ scrapy genspider -t crawl scrapyorg scrapy.org
Created spider 'scrapyorg' using template 'crawl'
crawl
用于運(yùn)行指定spider
命令:
scrapy crawl baidu
check
check用來(lái)檢查項(xiàng)目中的代碼是否有錯(cuò)誤。如果沒(méi)錯(cuò)會(huì)返回ok,如果有錯(cuò)會(huì)定位錯(cuò)誤代碼的位置。
命令:
scrapy check
示例:
? testproject scrapy check
----------------------------------------------------------------------
Ran 0 contracts in 0.000s
OK
list
運(yùn)行命令會(huì)列出項(xiàng)目中所有的spider。
命令:
scrapy list
示例,在我們創(chuàng)建的項(xiàng)目目錄下運(yùn)行:
? testproject scrapy list
baidu
zhihu
shell
運(yùn)行這個(gè)命令會(huì)進(jìn)入命令行交互模式,以給定的 URL(如果給出)或者空(沒(méi)有給出 URL)啟動(dòng) Scrapy shell。查看 Scrapy 終端(Scrapy shell)可以做一些簡(jiǎn)單的操作,可以使用選擇器快速獲取信息,方便調(diào)試。
fetch
使用這個(gè)命令會(huì)執(zhí)行一次請(qǐng)求,并調(diào)用scrapy的下載器,返回網(wǎng)頁(yè)的源碼。
命令:
scrapy fetch http://www.baidu.com
還可以加三個(gè)參數(shù):
--nolog
--headers
--no-redirect
分別是不輸出日志信息,返回網(wǎng)頁(yè)的請(qǐng)求頭和禁止重定向。如果網(wǎng)頁(yè)沒(méi)有重定向的話(huà)返回的還是原網(wǎng)頁(yè)。
view
命令:
scrapy view http://www.taobao.com
這個(gè)命令比較有用,它的作用是請(qǐng)求網(wǎng)址,輸出網(wǎng)址的源碼,并將該網(wǎng)頁(yè)保存成一個(gè)文件,使用瀏覽器打開(kāi)。如果打開(kāi)的網(wǎng)址和你正常加載的網(wǎng)頁(yè)有所不同,一般情況下沒(méi)顯示的部分使用了異步加載。因此該命令可以用來(lái)檢查 spider 所獲取到的頁(yè)面,并確認(rèn)這是您所期望的。
這樣在你以后的抓取過(guò)程中就可以使用這個(gè)命令分析網(wǎng)頁(yè)是否使用了異步加載。
runspider
這個(gè)命令和crawl命令的區(qū)別在于crawl命令后是spider的name,而runspider命令后加的是爬蟲(chóng)的文件名,在本文的項(xiàng)目中,使用crawl命令:
scrapy crawl baidu
使用runspider就是:
scrapy runspider baidu.py
settings
用來(lái)獲取項(xiàng)目的配置信息。
例如獲取項(xiàng)目名稱(chēng):
? testproject scrapy settings --get BOT_NAME
testproject
edit
如果你不使用vim作為編輯器的話(huà),這個(gè)命令不常用,因?yàn)檫@個(gè)命令會(huì)調(diào)用vim來(lái)編輯文件。
命令:
scrapy edit baidu
如果你想學(xué)習(xí)這個(gè)編輯器的話(huà),這有三篇入門(mén)文章可以供你參考:
1.vim快捷用法
2.對(duì)vim的簡(jiǎn)單配置
3.安裝YouCompleteMe插件-Python版
parse
獲取給定的 URL 并使用相應(yīng)的 spider 分析處理。如果您提供 --callback 選項(xiàng),則使用 spider 的該方法處理,否則使用 parse
使用上一篇的例子:
scrapy parse http://quotes.toscrape.com -c parse
支持的操作:
--spider = SPIDER:
bypass spider autodetection and force use of specific spider
跳過(guò)自動(dòng)檢測(cè) spider 并強(qiáng)制使用特定的 spider
--a NAME = VALUE:
set spider argument (may be repeated)
設(shè)置 spider 的參數(shù)(可能被重復(fù))
--callback or -c:
spider method to use as callback for parsing the response
spider 中用于解析返回(response)的回調(diào)函數(shù)
--pipelines:
process items through pipelines
在 pipeline 中處理 item
--rules or -r:
use CrawlSpider rules to discover the callback (i.e. spider method) to use for parsing the response
使用 CrawlSpider 規(guī)則來(lái)發(fā)現(xiàn)用來(lái)解析返回(response)的回調(diào)函數(shù)
--noitems:
don’t show scraped items
不顯示爬取到的 item
--nolinks:
don’t show extracted links
不顯示提取到的鏈接
--nocolour:
avoid using pygments to colorize the output
避免使用 pygments 對(duì)輸出著色
--depth or -d:
depth level for which the requests should be followed recursively (default: 1)
指定跟進(jìn)鏈接請(qǐng)求的層次數(shù)(默認(rèn):1)
--verbose or -v:
display information for each depth level
顯示每個(gè)請(qǐng)求的詳細(xì)信息
bench
這個(gè)命令會(huì)運(yùn)行 benchmark 測(cè)試,模擬測(cè)試scrapy的爬取速度。
version
這個(gè)命令可以查詢(xún)當(dāng)前scrapy的版本,和一些依賴(lài)庫(kù)版本信息。
示例:
? ~ scrapy version
Scrapy 1.3.3
? ~ scrapy version -v
Scrapy : 1.3.3
lxml : 3.7.3.0
libxml2 : 2.9.3
cssselect : 1.0.1
parsel : 1.1.0
w3lib : 1.17.0
Twisted : 17.1.0
Python : 3.5.2 (default, Nov 17 2016, 17:05:23) - [GCC 5.4.0 20160609]
pyOpenSSL : 17.0.0 (OpenSSL 1.0.2g 1 Mar 2016)
Platform : Linux-4.4.0-81-generic-x86_64-with-Ubuntu-16.04-xenial