在開始對命令行工具以及子命令的探索前,讓咱們首先了解一下Scrapy的項目的目錄結構。html
雖然能夠被修改,但全部的Scrapy項目默認有相似於下邊的文件結構:python
scrapy.cfg myproject/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py spider1.py spider2.py ...
scrapy.cfg
存放的目錄被認爲是 項目的根目錄 。該文件中包含python模塊名的字段定義了項目的設置。例如:shell
[settings]default = myproject.settings
scrapy
工具您能夠以無參數的方式啓動Scrapy工具。該命令將會給出一些使用幫助以及可用的命令:瀏覽器
Scrapy X.Y - no active project Usage: scrapy <command> [options] [args] Available commands: crawl Run a spider fetch Fetch a URL using the Scrapy downloader [...]
若是您在Scrapy項目中運行,當前激活的項目將會顯示在輸出的第一行。上面的輸出就是響應的例子。若是您在一個項目中運行命令將會獲得相似的輸出:dom
Scrapy X.Y - project: myproject Usage: scrapy <command> [options] [args] [...]
通常來講,使用 scrapy
工具的第一件事就是建立您的Scrapy項目:scrapy
scrapy startproject myproject
該命令將會在 myproject
目錄中建立一個Scrapy項目。編輯器
接下來,進入到項目目錄中:ide
cd myproject
這時候您就可使用 scrapy
命令來管理和控制您的項目了。函數
您能夠在您的項目中使用 scrapy
工具來對其進行控制和管理。工具
好比,建立一個新的spider:
scrapy genspider mydomain mydomain.com
有些Scrapy命令(好比 crawl
)要求必須在Scrapy項目中運行。 您能夠經過下邊的 commands reference 來了解哪些命令須要在項目中運行,哪些不用。
另外要注意,有些命令在項目裏運行時的效果有些許區別。 以fetch命令爲例,若是被爬取的url與某個特定spider相關聯, 則該命令將會使用spider的動做(spider-overridden behaviours)。 (好比spider指定的 user_agent
)。 該表現是有意而爲之的。通常來講, fetch
命令就是用來測試檢查spider是如何下載頁面。
該章節提供了可用的內置命令的列表。每一個命令都提供了描述以及一些使用例子。您老是能夠經過運行命令來獲取關於每一個命令的詳細內容:
scrapy <command> -h
您也能夠查看全部可用的命令:
scrapy -h
Scrapy提供了兩種類型的命令。一種必須在Scrapy項目中運行(針對項目(Project-specific)的命令),另一種則不須要(全局命令)。全局命令在項目中運行時的表現可能會與在非項目中運行有些許差異(由於可能會使用項目的設定)。
全局命令:
項目(Project-only)命令:
語法: scrapy startproject <project_name>
是否須要項目: no
在 project_name
文件夾下建立一個名爲 project_name
的Scrapy項目。
例子:
$ scrapy startproject myproject
語法: scrapy genspider [-t template] <name> <domain>
是否須要項目: yes
在當前項目中建立spider。
這僅僅是建立spider的一種快捷方法。該方法可使用提早定義好的模板來生成spider。您也能夠本身建立spider的源碼文件。
例子:
$ scrapy genspider -l Available templates: basic crawl csvfeed xmlfeed $ scrapy genspider -d basic import scrapy class $classname(scrapy.Spider): name = "$name" allowed_domains = ["$domain"] start_urls = ( 'http://www.$domain/', ) def parse(self, response): pass $ scrapy genspider -t basic example example.com Created spider 'example' using template 'basic' in module: mybot.spiders.example
語法: scrapy crawl <spider>
是否須要項目: yes
使用spider進行爬取。
例子:
$ scrapy crawl myspider [ ... myspider starts crawling ... ]
語法: scrapy check [-l] <spider>
是否須要項目: yes
運行contract檢查。
例子:
$ scrapy check -l first_spider * parse * parse_item second_spider * parse * parse_item $ scrapy check [FAILED] first_spider:parse_item >>> 'RetailPricex' field is missing [FAILED] first_spider:parse >>> Returned 92 requests, expected 0..4
語法: scrapy list
是否須要項目: yes
列出當前項目中全部可用的spider。每行輸出一個spider。
使用例子:
$ scrapy list spider1 spider2
語法: scrapy edit <spider>
是否須要項目: yes
使用 EDITOR
中設定的編輯器編輯給定的spider
該命令僅僅是提供一個快捷方式。開發者能夠自由選擇其餘工具或者IDE來編寫調試spider。
例子:
$ scrapy edit spider1
語法: scrapy fetch <url>
是否須要項目: no
使用Scrapy下載器(downloader)下載給定的URL,並將獲取到的內容送到標準輸出。
該命令以spider下載頁面的方式獲取頁面。例如,若是spider有 USER_AGENT
屬性修改了 User Agent,該命令將會使用該屬性。
所以,您可使用該命令來查看spider如何獲取某個特定頁面。
該命令若是非項目中運行則會使用默認Scrapy downloader設定。
例子:
$ scrapy fetch --nolog http://www.example.com/some/page.html [ ... html content here ... ] $ scrapy fetch --nolog --headers http://www.example.com/ {'Accept-Ranges': ['bytes'], 'Age': ['1263 '], 'Connection': ['close '], 'Content-Length': ['596'], 'Content-Type': ['text/html; charset=UTF-8'], 'Date': ['Wed, 18 Aug 2010 23:59:46 GMT'], 'Etag': ['"573c1-254-48c9c87349680"'], 'Last-Modified': ['Fri, 30 Jul 2010 15:30:18 GMT'], 'Server': ['Apache/2.2.3 (CentOS)']}
語法: scrapy view <url>
是否須要項目: no
在瀏覽器中打開給定的URL,並以Scrapy spider獲取到的形式展示。 有些時候spider獲取到的頁面和普通用戶看到的並不相同。 所以該命令能夠用來檢查spider所獲取到的頁面,並確認這是您所指望的。
例子:
$ scrapy view http://www.example.com/some/page.html [ ... browser starts ... ]
語法: scrapy shell [url]
是否須要項目: no
以給定的URL(若是給出)或者空(沒有給出URL)啓動Scrapy shell。 查看 Scrapy終端(Scrapy shell) 獲取更多信息。
例子:
$ scrapy shell http://www.example.com/some/page.html [ ... scrapy shell starts ... ]
語法: scrapy parse <url> [options]
是否須要項目: yes
獲取給定的URL並使用相應的spider分析處理。若是您提供 --callback
選項,則使用spider的該方法處理,不然使用 parse
。
支持的選項:
--spider=SPIDER
: 跳過自動檢測spider並強制使用特定的spider
--a NAME=VALUE
: 設置spider的參數(可能被重複)
--callback
or -c
: spider中用於解析返回(response)的回調函數
--pipelines
: 在pipeline中處理item
--rules
or -r
: 使用 CrawlSpider
規則來發現用來解析返回(response)的回調函數
--noitems
: 不顯示爬取到的item
--nolinks
: 不顯示提取到的連接
--nocolour
: 避免使用pygments對輸出着色
--depth
or -d
: 指定跟進連接請求的層次數(默認: 1)
--verbose
or -v
: 顯示每一個請求的詳細信息
例子:
$ scrapy parse http://www.example.com/ -c parse_item [ ... scrapy log lines crawling example.com spider ... ] >>> STATUS DEPTH LEVEL 1 <<< # Scraped Items ------------------------------------------------------------ [{'name': u'Example item', 'category': u'Furniture', 'length': u'12 cm'}] # Requests ----------------------------------------------------------------- []
語法: scrapy settings [options]
是否須要項目: no
獲取Scrapy的設定
在項目中運行時,該命令將會輸出項目的設定值,不然輸出Scrapy默認設定。
例子:
$ scrapy settings --get BOT_NAME scrapybot $ scrapy settings --get DOWNLOAD_DELAY 0
語法: scrapy runspider <spider_file.py>
是否須要項目: no
在未建立項目的狀況下,運行一個編寫在Python文件中的spider。
例子:
$ scrapy runspider myspider.py [ ... spider starts crawling ... ]
語法: scrapy version [-v]
是否須要項目: no
輸出Scrapy版本。配合 -v
運行時,該命令同時輸出Python, Twisted以及平臺的信息,方便bug提交。
0.17 新版功能.
語法: scrapy bench
是否須要項目: no
運行benchmark測試。 Benchmarking 。