1. 程式人生 > >Scrapy命令行工具簡介

Scrapy命令行工具簡介

一個 XML 介紹 col 中文 awl 添加 分享圖片 機制

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命令行工具簡介