通過這篇文章,我們會了解scrapy的命令行工具。
文章介紹命令行工具的順序基本就是按照官方文檔的順序來。
命令
scrapy的命令分為全局命令和項目內命令。全局命令也就是不需要在項目所在目錄下運行,項目內命令必須在生成項目后,在此目錄下運行的命令。舉個栗子,startproject
就是全局命令,因為在運行這個命令的時候還沒有項目,check
就是項目內命令,因為必須有項目才能檢查代碼正確與否。
Global commands:
- startproject
- genspider
- settings
- runspider
- shell
- fetch
- view
- version
Project-only commands:
- crawl
- check
- list
- edit
- parse
- bench
創(chuàng)建項目
命令:
scrapy startproject testproject
這個命令用于生成我們所需要的爬蟲項目。進入到該目錄中,會發(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
基本模板。如果你問我可以自定義模板嗎,當然可以了,不過本文暫時不涉及這個問題,如果有需要可以先自行google。
使用模板命令:
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
運行這個命令會進入命令行交互模式,以給定的 URL(如果給出)或者空(沒有給出 URL)啟動 Scrapy shell。查看 Scrapy 終端(Scrapy shell)可以做一些簡單的操作,可以使用選擇器快速獲取信息,方便調試。
fetch
使用這個命令會執(zhí)行一次請求,并調用scrapy的下載器,返回網頁的源碼。
命令:
scrapy fetch http://www.baidu.com
還可以加三個參數(shù):
--nolog
--headers
--no-redirect
分別是不輸出日志信息,返回網頁的請求頭和禁止重定向。如果網頁沒有重定向的話返回的還是原網頁。
view
命令:
scrapy view http://www.taobao.com
這個命令比較有用,它的作用是請求網址,輸出網址的源碼,并將該網頁保存成一個文件,使用瀏覽器打開。如果打開的網址和你正常加載的網頁有所不同,一般情況下沒顯示的部分使用了異步加載。因此該命令可以用來檢查 spider 所獲取到的頁面,并確認這是您所期望的。
這樣在你以后的抓取過程中就可以使用這個命令分析網頁是否使用了異步加載。
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作為編輯器的話,這個命令不常用,因為這個命令會調用vim來編輯文件。
命令:
scrapy edit baidu
如果你想學習這個編輯器的話,這有三篇入門文章可以供你參考:
1.vim快捷用法
2.對vim的簡單配置
3.安裝YouCompleteMe插件-Python版
parse
獲取給定的 URL 并使用相應的 spider 分析處理。如果您提供 --callback 選項,則使用 spider 的該方法處理,否則使用 parse
使用上一篇的例子:
scrapy parse http://quotes.toscrape.com -c parse
支持的操作:
--spider = SPIDER:
bypass spider autodetection and force use of specific spider
跳過自動檢測 spider 并強制使用特定的 spider
--a NAME = VALUE:
set spider argument (may be repeated)
設置 spider 的參數(shù)(可能被重復)
--callback or -c:
spider method to use as callback for parsing the response
spider 中用于解析返回(response)的回調函數(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)的回調函數(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)
指定跟進鏈接請求的層次數(shù)(默認:1)
--verbose or -v:
display information for each depth level
顯示每個請求的詳細信息
bench
這個命令會運行 benchmark 測試,模擬測試scrapy的爬取速度。
version
這個命令可以查詢當前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