Scrapy命令行工具簡介
Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0,
在最初使用Scrapy時,使用編輯器或IDE手動編寫模塊來創建爬蟲(Spider)程序,然後使用scrapy crawl命令執行Spider。
這種方式很初級、繁瑣,不適合更大型的項目。
很好的是,Scrapy提供了 命令行工具(Command line tool),通過這套工具,開發者可以輕松建立 Scrapy項目,而不僅僅是一個一個的Spider程序。
初見Scrapy命令行工具
先說幾個使用過的Scrapy命令行工具中的命令:
-scrapy startproject
創建一個新的爬蟲項目,語法如下:
scrapy startproject <project_name> [project_dir]
-scrapy genspider
在當前目錄下創建一個爬蟲程序(重名了會怎樣?待試驗),語法如下:
scrapy genspider [-t template] <name> <domain>
其中,template可以為basic、crawl、csvfeed、xmlfeed,默認是basic,其它三個尚未用過。
爬蟲程序的name需要是一個合法的Python標識符(說法不太準確,需要更正),domain是需要爬取的網址的域名,會出現在爬蟲的allowed_domains屬性中,還會影響到爬蟲的start_urls屬性。
註意:domain中不能有http://、https://,僅僅是域名,不包含協議部分(犯過錯誤)。
疑問:domain是否可以設置多個呢?(需驗證)
下面是第一次創建Spider時犯錯了:
下圖的start_urls中以兩個http://開頭!
執行爬蟲程序時發生DNSLookupError!
註意,默認是給domain添加http://,那麽,https網站還得手動更改?
更正代碼後——刪除allowed_domains和start_urls中多余的http://,爬蟲程序可以正常執行。
-scrapy runspider
在沒有使用scrapy startproject之前,自己寫一個爬蟲程序——沒有項目的概念,此時,使用runspider命令來執行,因此,此命令時全局的(Global)。
語法如下:參數是 Python文件
scrapy runspider <spider_file.py>
-scrapy crawl
在創建的Scrapy項目中執行爬蟲程序,依托於項目,此命令並非全局的。
語法如下:參數是 爬蟲項目 內的 爬蟲的 name,即在genspider時使用的name。
scrapy crawl <spider>
之前還會把runspider和crawl搞混,現在不會了。
----
上面就是幾個自己常用的命令,本文後面會對其它命令進行簡單介紹。
Scrapy的命令行工具官文
Scrapy命令行工具運行機制
Scrapy命令行工具運行時,會尋找一個配置文件,此文件命名為scrapy.cfg。在使用startproject建立爬蟲項目時,此文件出現在爬蟲項目的根目錄下。
不過,scrapy.cfg不僅僅會出現在這裏,見官文的截圖(不再贅述):
對於1,但孤的Windows系統沒有c:scrapy目錄,更沒有下面的scrapy.cfg了,需要自己建立嗎?
對於2,也沒有在用戶根目下發現.scrapy.cfg文件;
看來,只有3——Scrapy項目的根目錄下的scrapy.cfg是有效的了。
除了配置文件外,Scrapy命令行工具還可以下面三個環境變量配合使用:
-SCRAPY_SETTINGS_MODULE
-SCRAPY_PROJECT
-SCRAPY_PYTHON_SHELL
默認是打開標準的Python控制臺(配置值為python,),可以將其配置為ipython(Scrapy推薦)、bpython,代表其它兩個Python版本。
scrapy項目的默認結果如下(截圖自官文的Tutorial文檔):
其中,scrapy.cfg文件的內容格式如下:
[settings]
default = myproject.settings
上面的myproject表示項目名稱,在上圖的tutorial項目中,其為tutorial。這句表示,配置默認是tutorial目錄下的settings.py文件的配置(請參考官文Settings)。
scrapy命令行工具用法
-直接輸入scrapy 或 輸入scrapy -h,顯示scrapy的用法信息;
-輸入scrayp <command> -h,顯示子命令的用法信息;
-命令分為兩種:項目命令(Project-specific commands)、全局命令(Global commands),前者只能在Scrapy項目中使用(有效),後者無論在哪裏使用都有效。需要註意的是,某些命令在項目外執行和項目裏面執行時是有區別的,比如,全局命令fetch,(省略若幹字,還沒弄清楚,請參考官網先)。
-全局命令 如下
startproject, genspider, settings, runspider, shell, fetch, view, version
-項目命令 如下
crawl, check, list, edit, parse, bench
更多Scrapy命令介紹
全局命令
-settings
獲取Scrapy的配置,語法:
scrapy settings [options]
示例見官文。
-shell
重要!
語法如下:
scrapy shell [url]
基於參數url打開一個Scrapy shell,如果沒有url參數,直接打開一個Scrapy shell。
也支持UNIX風格的本地文件路徑,但是,相對路徑必須用 ./或../ 開頭,或者使用絕對路徑,只是文件名是不行的。
scrapy shell官文鏈接。
開發者可以使用Scrapy shell來驗證自己抓取數據的規則是否正確,熟練使用後,可以更高效進行Scrapy項目開發。
沒有使用url打開後的示例:
-fetch
未使用過。語法如下:
scrapy fetch <url>
使用Scrapy下載器下載給定的url並把內容寫到標準輸出。
可以通過配置項指定爬蟲程序。
更多消息見官文。
-view
用瀏覽器打開給定的鏈接。
-version
查看Scrapy版本,加-v查看Python、twisted和平臺相關信息。
項目命令
-check
重要!
和Scrapy項目的測試有關!
需要深入學習!
尚未使用過,請參考官文Spiders Contracts。
-list
顯示當前Scrapy項目可用的 爬蟲。
-edit
編輯指定的爬蟲程序。
經過測試,在Windows上未能打開IDLE,和孤是在virtualenv中操作有關系嗎?
Linux上是用vi打開(vim?)。
-parse
未使用過。語法如下:
scrapy parse <url> [options]
獲取給定的URL,並用處理它的spider(--callback或-c指定解析函數)解析它的響應。
此函數有很多配置項,請查閱官文。
-bench
運行一個benchmark,官文Benchmarking,還沒用過,
上面標記了“重要”的都需要達到【精通】的級別,當然,更需要熟悉CSS選擇器和XPath。
定制項目命令
看清楚,是定制 項目命令!
全局命令就固定那幾個了,但開發者可以定制項目命令,可以很久很久都不會用到吧,不再深入介紹。
後記
還有不少命令的用法不是很熟悉,還需要更加多地實踐和理解;
-版本1.0:2018-06-30 22:56
寫完後感覺好多命令不是很熟悉啊!還得多練習。後面更熟練了,再進行補充。
目前認為兩個命令最重要:shell、check。
其實,這篇文章寫的有些亂,因為自己不是精通Scrapy命令行工具吧!日後真的需要完善才行!
當然,孤以為文中還是提供了一些初級的、有價值的信息的。
Scrapy命令行工具簡介