通過這篇文章屠阻,我們會了解scrapy的命令行工具郁岩。
文章介紹命令行工具的順序基本就是按照官方文檔的順序來铡恕。
命令
scrapy的命令分為全局命令和項目內(nèi)命令煮嫌。全局命令也就是不需要在項目所在目錄下運行,項目內(nèi)命令必須在生成項目后碗暗,在此目錄下運行的命令颈将。舉個栗子,startproject
就是全局命令言疗,因為在運行這個命令的時候還沒有項目晴圾,check
就是項目內(nèi)命令,因為必須有項目才能檢查代碼正確與否噪奄。
Global commands:
- startproject
- genspider
- settings
- runspider
- shell
- fetch
- view
- version
Project-only commands:
- crawl
- check
- list
- edit
- parse
- bench
創(chuàng)建項目
命令:
scrapy startproject testproject
這個命令用于生成我們所需要的爬蟲項目死姚。進(jìn)入到該目錄中,會發(fā)現(xiàn)生成了許多文件梗醇。這些文件的用法在以后都會一一詳解知允。
生成spider
命令:
scrapy genspider baidu www.baidu.com
輸入該命令會在spiders文件夾下生成一個名為 baidu.py 的文件,cat這個文件叙谨,我們會發(fā)現(xiàn)其實就是最基本的spider模板温鸽。
模板選擇
在終端輸入命令可以查看生成模板的類型:
scrapy genspider -l
輸出:
Available templates:
basic
crawl
csvfeed
xmlfeed
也就是系統(tǒng)自帶這四種模板,如果沒有指定模板手负,會選擇basic
基本模板涤垫。如果你問我可以自定義模板嗎,當(dāng)然可以了竟终,不過本文暫時不涉及這個問題蝠猬,如果有需要可以先自行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
用于運行指定spider
命令:
scrapy crawl baidu
check
check
用來檢查項目中的代碼是否有錯誤。如果沒錯會返回ok喘鸟,如果有錯會定位錯誤代碼的位置匆绣。
命令:
scrapy check
示例:
? testproject scrapy check
----------------------------------------------------------------------
Ran 0 contracts in 0.000s
OK
list
運行命令會列出項目中所有的spider。
命令:
scrapy list
示例什黑,在我們創(chuàng)建的項目目錄下運行:
? testproject scrapy list
baidu
zhihu
shell
運行這個命令會進(jìn)入命令行交互模式崎淳,以給定的 URL(如果給出)或者空(沒有給出 URL)啟動 Scrapy shell。查看 Scrapy 終端(Scrapy shell)可以做一些簡單的操作愕把,可以使用選擇器快速獲取信息拣凹,方便調(diào)試森爽。
fetch
使用這個命令會執(zhí)行一次請求,并調(diào)用scrapy的下載器嚣镜,返回網(wǎng)頁的源碼爬迟。
命令:
scrapy fetch http://www.baidu.com
還可以加三個參數(shù):
--nolog
--headers
--no-redirect
分別是不輸出日志信息,返回網(wǎng)頁的請求頭和禁止重定向祈惶。如果網(wǎng)頁沒有重定向的話返回的還是原網(wǎng)頁雕旨。
view
命令:
scrapy view http://www.taobao.com
這個命令比較有用扮匠,它的作用是請求網(wǎng)址捧请,輸出網(wǎng)址的源碼,并將該網(wǎng)頁保存成一個文件棒搜,使用瀏覽器打開疹蛉。如果打開的網(wǎng)址和你正常加載的網(wǎng)頁有所不同,一般情況下沒顯示的部分使用了異步加載力麸。因此該命令可以用來檢查 spider 所獲取到的頁面,并確認(rèn)這是您所期望的可款。
這樣在你以后的抓取過程中就可以使用這個命令分析網(wǎng)頁是否使用了異步加載。
runspider
這個命令和crawl命令的區(qū)別在于crawl命令后是spider的name
克蚂,而runspider命令后加的是爬蟲的文件名闺鲸,在本文的項目中,使用crawl命令:
scrapy crawl baidu
使用runspider就是:
scrapy runspider baidu.py
settings
用來獲取項目的配置信息埃叭。
例如獲取項目名稱:
? testproject scrapy settings --get BOT_NAME
testproject
edit
如果你不使用vim作為編輯器的話摸恍,這個命令不常用,因為這個命令會調(diào)用vim來編輯文件赤屋。
命令:
scrapy edit baidu
如果你想學(xué)習(xí)這個編輯器的話立镶,這有三篇入門文章可以供你參考:
1.vim快捷用法
2.對vim的簡單配置
3.安裝YouCompleteMe插件-Python版
parse
獲取給定的 URL 并使用相應(yīng)的 spider 分析處理。如果您提供 --callback 選項,則使用 spider 的該方法處理,否則使用 parse
使用上一篇的例子:
scrapy parse http://quotes.toscrape.com -c parse
支持的操作:
--spider = SPIDER:
bypass spider autodetection and force use of specific spider
跳過自動檢測 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ī)則來發(fā)現(xiàn)用來解析返回(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 對輸出著色
--depth or -d:
depth level for which the requests should be followed recursively (default: 1)
指定跟進(jìn)鏈接請求的層次數(shù)(默認(rèn):1)
--verbose or -v:
display information for each depth level
顯示每個請求的詳細(xì)信息
bench
這個命令會運行 benchmark 測試类早,模擬測試scrapy的爬取速度媚媒。
version
這個命令可以查詢當(dāng)前scrapy的版本,和一些依賴庫版本信息涩僻。
示例:
? ~ 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