scrapy入門教程3:scrapy的shell命令

發表於2016-06-02

0. 基本環境說明

  1. 本文截圖及執行環境均在Win8上實現(是的,我放假回家了,家裡的機器是win8的沒有辦法),但基本步驟與win 7環境基本相同。(應該把~)ps:我後來換了臺win7的電腦,所以這篇文章的環境是win8和win7的結合體~,哇哈哈~,然而這並沒有什麼卵用~
  2. scrapy版本為1.0.3
  3. 這篇文章基本就是很無恥的翻譯了一下官方文件順便新增了一點自己的理解
  4. 參考文獻以及下載連結:
  5. 喜歡的就點推薦+收藏把~這樣我會把我知道的都寫出來的,哇哈哈~
  6. 我用的作業系統是64位的,但是python用的是32位的,因為32位的包比較全,但是我最近在往64位的伺服器上移植,到時候有問題我會及時新增的。

1. scrapy的shell命令詳解

1.1 命令概覽

首先可以通過以下命令來檢視所有scrapy可用的命令型別:

scrapy目前的命令可以分為專案命令全域性命令兩大類,共14種(嗯 ,我認真的數了兩遍),分佈也極其對稱,專案級命令7種全域性命令7種(嗯,我又認真的數了一遍)。
分別是:

全域性命令

  • startproject
  • settings
  • runspider
  • shell
  • fetch
  • view
  • version

專案命令

  • crawl
  • check
  • list
  • edit
  • parse
  • genspider
  • bench

哇哈哈,然我們接著開始一一學習一下這些命令吧,有些命令好用的不要不要的哦~

1.2 全域性命令解析

1.2.1 startproject 建立專案命令

  • 基本語法:scrapy startproject
  • 是否需要專案存在:當然是不需要咯~

其實這個命令我們在之前的教程當中也用過了,應該不陌生,就是在建立一個名為project_name的爬蟲框架,供我們調教(猥瑣臉)。是建立爬蟲專案開天闢地的第一步喲~。

用例

1.2.2 settings 檢視配置檔案引數命令

  • 基本語法:scrapy settings [options]
  • 是否需要專案存在:當然是不需要咯~(這是官方寫的,貌似有點問題)

嘛這個命令是用來檢視專案引數的。官方文件說不需要專案,經過本人測試,如果在專案目錄下,就會顯示出專案的settings.py裡面對應的專案的內容,如果實在專案目錄之外,貌似會返回一個scrapy的預設值,我個人建議大家在專案目錄下使用這個命令來檢視settings.py裡面的內容就ok了。

用例

1.2.3 runspider 執行爬蟲命令

  • 基本語法:scrapy runspider
  • 是否需要專案存在:當然是不需要咯~

貌似這個命令是不依託一個scrapy專案而直接執行一個爬蟲的命令。弱弱的說一句,這種沒有settings沒有pipelines的爬蟲真的好麼

用例

1.2.4 shell 建立一個shell環境用於除錯response的命令(很重要!!!)

  • 基本語法:scrapy shell [url]
  • 是否需要專案存在:當然是不需要咯~

這個命令真的很重要啦~,主要目的是建立一個shell環境用於除錯response的命令(嗯,和標題一模一樣),因為她太重要了,所以我臨時決定回來專門寫一篇文章來介紹這個命令,迫不及待的同學去翻官方文件吧~(其實我是累了,因為我一邊碼字一遍在重灌電腦而且現在也半夜十二點多了~說好的早睡又泡湯的)

用例:

1.2.5 fetch 顯示爬取過程

  • 基本語法:scrapy fetch [url]
  • 是否需要專案存在:貌似有沒有都行

這個命令其實是在標準輸出中顯示呼叫一個爬蟲來爬取指定的url的全過程。
要注意的一點是,如果是在一個專案目錄下使用這個命令則會預設呼叫這個專案當中的爬蟲,如果在專案目錄之外使用這個命令,則會呼叫scrapy預設的爬蟲來爬取。所以有沒有專案存在都能執行。

用例:

1.2.6 view 檢視頁面內容命令

  • 基本語法:scrapy view [url]
  • 是否需要專案存在:無需專案存在

當你對於某些資訊死也提取不出來的時候就要考慮使用一下使用這個view了,這個命令是給你下載一個頁面並用瀏覽器開啟,目的是讓你對比一下scrapy”看到”的頁面和你通過瀏覽器看到的頁面有什麼不同,這個對於某些動態生成的網頁很有作用!但是這裡有個坑大家注意一下,我在Win7環境下,使用這個命令的時候在下載對應網頁的同時用瀏覽器開啟(目測純命令列無圖形介面的Linux因該不會自動開啟瀏覽器),此時裡面的ajax因為有了瀏覽器開啟,又被執行了,所以通過瀏覽器開啟的頁面應該和你正常訪問的網頁並無二致,但並不是真正scrapy看到的網頁。如何看到真正的網頁內?很簡單啦,找到原始地址用sublime開啟就是啦~。原始地址就在瀏覽器的位址列裡哦~

用例:

1.2.7 version 顯示版本資訊

  • 基本語法:scrapy version [-v]
  • 是否需要專案存在:無需專案存在

此命令很簡單,就是顯示scrapy的版本,如果加上-v命令則還會顯示Python, Twisted和平臺的資訊,貌似對於bug尋找和報告很有幫助!

1.3 專案命令解析

1.3.1 genspider 通過模板生成爬蟲

  • 基本語法:scrapy genspider [-t template]
  • 是否需要專案存在:專案命令嘛,果斷需要~

這個命令主要是幫助我們在編寫多個爬蟲的時候,利用現有爬蟲來快速生成新的爬蟲,當然這不是唯一建立新爬蟲的方式,騷年,不嫌累的話可以自己重新敲一個~

用例:

通過新增引數-l來檢視現有的爬蟲模板

通過新增引數-d和模板名稱來檢視現有模板的內容,嘛如果實在linux環境下會比較好用,我等在win下面混的菜鳥還是右鍵用sublime來檢視內容吧

這就是激動人心的生成爬蟲的方式了,通過引數-t後面緊接著的內容是模板名稱 新爬蟲的名稱 新爬蟲允許爬取的域名,貌似一般爬蟲名稱基本都是域名主體呢~,聰明的同學也知道這裡新爬蟲名稱 新爬蟲允許爬取的域名分別對應的就是之前上一篇教程提到的nameallowed_domains這兩個引數咯。

1.3.2 crawl 啟動爬蟲命令

  • 基本語法: scrapy crawl
  • 是否需要專案存在:專案命令嘛,果斷需要~

這個命令是很激動人心的,每次寫完爬蟲就迫不及待的一試,大家在上篇教程中想必也已經實驗過了。不過貌似一次只能跑一個爬蟲,想執行多個爬蟲怎麼辦呢?我現在想到的兩個解決方案
1.自己寫一個bat或者shell指令碼
2.自己新增一個scrapy的shell命令(沒錯,聽起來屌飛了,我會在以後的教程中告訴你怎麼做的,想看的以後的教程,哼哼~,我才不會請你點推薦加收藏呢~)

用例:

1.3.3 check 檢查爬蟲完整性

  • 基本語法: scrapy check [-l]
  • 是否需要專案存在:專案命令嘛,果斷需要~

這個命令官方寫的是Contect檢查然後就沒了,我在win7下面試了一下,能檢查出一部分錯誤,但是後面加一個-l引數貌似沒什麼用啊,沒有顯示出官方文件例子裡面的spider列表和函式列表,倒是有一堆warning,我回來研究研究一下原始碼看看把,這個命令目前就是檢查一些語法、importwarning等錯誤,邏輯錯誤肯定是查不出來的啦~

用例:

1.3.4 list 檢視爬蟲列表命令

  • 基本語法: scrapy list
  • 是否需要專案存在:專案命令嘛,果斷需要~

這個命令就是檢視一下這個專案裡面目前有哪些爬蟲~,寫了很多的爬蟲之後打這個命令有一種閱兵的快感呢~,一般linux環境下使用較多~

用例:

1.3.5 edit 編輯爬蟲命令

  • 基本語法: scrapy edit
  • 是否需要專案存在:專案命令嘛,果斷需要~

典型的在linux裡面用的高大上命令啊,輸入此命令可以立刻調取settings.py中的editor指定的編輯器來開啟爬蟲進行編輯(是的,settings.py裡面還能配這麼屌的引數我也很震驚)。順便說一句我的win7系統執行之後直接報錯…傷心啊

用例:

1.3.6 parse

  • 基本語法: scrapy parse [options]
  • 是否需要專案存在:專案命令嘛,果斷需要~

這方法適合測試自己寫的spider和後續各種組建如:pipeline等組合使用的情況,我一般用來測試自己編寫的spider(在沒有見過這個命令之前我一直是用crawl命令來測試的…悲劇啊)。

支援的引數倒是蠻豐富的:

  • --spider=SPIDER: 沒有指定spider的情況下其程式搜尋,用這個選項可以強行指定某個spider
  • --a NAME=VALUE: 用來設定spider需要的引數,可以多個
  • --callback-c: 指定spider裡面用於處理response的函式,沒有強行制定的話,預設使用parse函式
  • --pipelines:用來指定後續的pipelines,可以靈活定製哦~
  • --rules-r: 通過CrawlSpider設定的規則來選取對應的函式當作解析response的回撥函式
  • --noitems: 不顯示抓取的items
  • --nolinks: 不顯示提取的連結
  • --nocolour: 輸出的結果不要高亮顯示(這個選項還是不要用得好)
  • --depth-d: 設定爬取深度,預設為1哦~
  • --verbose-v: 顯示被爬取的每層的相關資訊

用列:

1.3.7 bench 硬體測試命令

  • 基本語法: scrapy bench
  • 是否需要專案存在:不需要

這個命令我個人理解就是對你的硬體做一個爬蟲的壓力測試,看看不考慮網路的情況下你的硬體究竟能將這個爬蟲執行的多快。當然這個有點理論速度的味道,實際上你爬起來不可能這個麼快。姑且算是告訴你硬體的瓶頸的方法吧。不過我win7上執行了貌似沒有什麼用,沒有出現官方說好的各種引數,回來有空還要仔細研究一下啊。

用例:

我終於寫完了,喜歡的就收藏+推薦一下吧,這樣我就會更有動力寫新的教程了,哇哈哈~

相關文章