0.10 新版功能.html
Scrapy是經過 scrapy
命令行工具進行控制的。 這裏咱們稱之爲 「Scrapy tool」 以用來和子命令進行區分。 對於子命令,咱們稱爲 「command」 或者 「Scrapy commands」。python
Scrapy tool 針對不一樣的目的提供了多個命令,每一個命令支持不一樣的參數和選項。git
在開始對命令行工具以及子命令的探索前,讓咱們首先了解一下Scrapy的項目的目錄結構。github
雖然能夠被修改,但全部的Scrapy項目默認有相似於下邊的文件結構:shell
scrapy.cfg myproject/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py spider1.py spider2.py ...
scrapy.cfg
存放的目錄被認爲是 項目的根目錄 。該文件中包含python模塊名的字段定義了項目的設置。例如:瀏覽器
[settings] default = myproject.settings
scrapy
工具您能夠以無參數的方式啓動Scrapy工具。該命令將會給出一些使用幫助以及可用的命令:dom
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項目中運行,當前激活的項目將會顯示在輸出的第一行。上面的輸出就是響應的例子。若是您在一個項目中運行命令將會獲得相似的輸出:scrapy
Scrapy X.Y - project: myproject Usage: scrapy <command> [options] [args] [...]
通常來講,使用 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>
在 project_name
文件夾下建立一個名爲 project_name
的Scrapy項目。
例子:
$ scrapy startproject myproject
scrapy genspider [-t template] <name> <domain>
在當前項目中建立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>
使用spider進行爬取。
例子:
$ scrapy crawl myspider
[ ... myspider starts crawling ... ]
scrapy check [-l] <spider>
運行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
列出當前項目中全部可用的spider。每行輸出一個spider。
使用例子:
$ scrapy list
spider1
spider2
scrapy edit <spider>
使用 EDITOR
中設定的編輯器編輯給定的spider
該命令僅僅是提供一個快捷方式。開發者能夠自由選擇其餘工具或者IDE來編寫調試spider。
例子:
$ scrapy edit spider1
scrapy fetch <url>
使用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>
在瀏覽器中打開給定的URL,並以Scrapy spider獲取到的形式展示。 有些時候spider獲取到的頁面和普通用戶看到的並不相同。 所以該命令能夠用來檢查spider所獲取到的頁面,並確認這是您所指望的。
例子:
$ scrapy view http://www.example.com/some/page.html
[ ... browser starts ... ]
scrapy shell [url]
以給定的URL(若是給出)或者空(沒有給出URL)啓動Scrapy shell。 查看 Scrapy終端(Scrapy shell) 獲取更多信息。
例子:
$ scrapy shell http://www.example.com/some/page.html
[ ... scrapy shell starts ... ]
scrapy parse <url> [options]
獲取給定的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]
獲取Scrapy的設定
在項目中運行時,該命令將會輸出項目的設定值,不然輸出Scrapy默認設定。
例子:
$ scrapy settings --get BOT_NAME
scrapybot
$ scrapy settings --get DOWNLOAD_DELAY
0
scrapy runspider <spider_file.py>
在未建立項目的狀況下,運行一個編寫在Python文件中的spider。
例子:
$ scrapy runspider myspider.py
[ ... spider starts crawling ... ]
scrapy version [-v]
輸出Scrapy版本。配合 -v
運行時,該命令同時輸出Python, Twisted以及平臺的信息,方便bug提交。
0.11 新版功能.
scrapy deploy [ <target:project> | -l <target> | -L ]
將項目部署到Scrapyd服務。查看 部署您的項目 。
您也能夠經過 COMMANDS_MODULE
來添加您本身的項目命令。您能夠以 scrapy/commands 中Scrapy commands爲例來了解如何實現您的命令。
Default: ''
(empty string)
用於查找添加自定義Scrapy命令的模塊。
例子:
COMMANDS_MODULE = 'mybot.commands'