コマンドラインツール¶
バージョン 0.10 で追加.
Scrapyは scrapy
コマンドラインツールによって制御できます。ここでは、「コマンド」または「Scrapyコマンド」と呼ばれるサブコマンドと区別するために、「Scrapyツール」と呼びます。
Scrapyツールは複数の目的のためにいくつかのコマンドを提供し、それぞれ異なる引数とオプションのセットを受け入れます。
( scrapy deploy
コマンドは、スタンドアロンの scrapyd-deploy
があるので、バージョン1.0で削除されました。 Deploying your project を参照してください。)
環境設定¶
Scrapyは、以下の標準的な場所にあるini形式の scrapy.cfg
ファイルを探します。
/etc/scrapy.cfg
またはc:\scrapy\scrapy.cfg
(システム全体)- ユーザー全体の設定として
~/.config/scrapy.cfg
($XDG_CONFIG_HOME
) と~/.scrapy.cfg
- Scrapyプロジェクトのルートの
scrapy.cfg
(次のセクションを参照)
これらのファイルの設定は、優先順位によりマージされます。ユーザー定義の値はシステム全体の設定よりも優先され、プロジェクトの設定が定義されている場合は、他のすべての設定を上書きします。
また、Scrapyの設定として使えるいくつかの環境変数があります。
SCRAPY_SETTINGS_MODULE
( Designating the settings を参照)SCRAPY_PROJECT
(see Sharing the root directory between projects)SCRAPY_PYTHON_SHELL
( Scrapy shell を参照)
Scrapyプロジェクトのデフォルト構成¶
コマンドラインツールとそのサブコマンドを解説する前に、まずScrapyプロジェクトのディレクトリ構造について理解しておきましょう。
すべてのScrapyプロジェクトは、デフォルトで以下のようなファイル構造になっています。変更することもできます。
scrapy.cfg
myproject/
__init__.py
items.py
middlewares.py
pipelines.py
settings.py
spiders/
__init__.py
spider1.py
spider2.py
...
scrapy.cfg
ファイルが存在するディレクトリは、 プロジェクトのルートディレクトリ と呼ばれます。このファイルには、プロジェクト設定を定義するPythonモジュールの名前が含まれています。以下に例を示します。
[settings]
default = myproject.settings
Sharing the root directory between projects¶
A project root directory, the one that contains the scrapy.cfg
, may be
shared by multiple Scrapy projects, each with its own settings module.
In that case, you must define one or more aliases for those settings modules
under [settings]
in your scrapy.cfg
file:
[settings]
default = myproject1.settings
project1 = myproject1.settings
project2 = myproject2.settings
By default, the scrapy
command-line tool will use the default
settings.
Use the SCRAPY_PROJECT
environment variable to specify a different project
for scrapy
to use:
$ scrapy settings --get BOT_NAME
Project 1 Bot
$ export SCRAPY_PROJECT=project2
$ scrapy settings --get BOT_NAME
Project 2 Bot
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プロジェクトの中にいる場合、最初の行は現在アクティブなプロジェクトを表します。この例では、プロジェクトの外から実行されました。プロジェクトの中から実行すると、次のような内容が出力されます。
Scrapy X.Y - project: myproject
Usage:
scrapy <command> [options] [args]
[...]
プロジェクトの作成¶
あなたが scrapy
ツールで最初に行うことは、Scrapyプロジェクトを作成することです。
scrapy startproject myproject [project_dir]
これにより、 project_dir
ディレクトリの下にScrapyプロジェクトが作成されます。 project_dir
を指定しなければ、 project_dir
は myproject
と指定した場合と同じになります。
次に、作成したプロジェクトディレクトリの中に入ります。
cd project_dir
これで、 scrapy
コマンドを使用してプロジェクトの管理やコントロールをする準備が整いました。
プロジェクトのコントロール¶
プロジェクト内から scrapy
ツールを使用して、プロジェクトのコントロールや管理をします。
たとえば、新しいSpiderを作成するには次のようにします。
scrapy genspider mydomain mydomain.com
crawl
など、一部のScrapyコマンドはScrapyプロジェクト内から実行する必要があります。プロジェクト内から実行しなければならないコマンドについては、 コマンドリファレンス を参照してください。
また、いくつかのコマンドは、プロジェクト内から実行するときに、少し違った動作をすることがあります。たとえば、フェッチされたURLが特定のSpiderに関連付けられている場合、fetchコマンドはSpiderの属性でデフォルトの属性を上書きします(例えば、ユーザーエージェントを上書きする user_agent
属性など)。 fetch
コマンドは、Spiderがどのようにページをダウンロードしているかを調べるために使用されるため、これは意図的なものです。
使用可能なコマンド¶
このセクションでは、使用可能な組み込みコマンドのリストと、使用例を示します。次のコマンドを実行することによって、各コマンドについての詳細情報をいつでも得ることができます。
scrapy <command> -h
次のコマンドで、使用可能なすべてのコマンドを表示できます。
scrapy -h
コマンドは、Scrapyプロジェクト内でのみ動作するプロジェクト固有のコマンドと、Scrapyプロジェクトの外でも動作するグローバルなコマンドの2種類があります。グローバルなコマンドをプロジェクト内から実行すると、プロジェクトで上書きされた設定を使用するため、動作が若干異なる場合があります。
グローバルなコマンド:
プロジェクト固有のコマンド:
startproject¶
- 構文:
scrapy startproject <project_name> [project_dir]
- プロジェクト: 不要
project_dir
ディレクトリの下に project_name
という名前の新しいScrapyプロジェクトを作成します。 project_dir
が指定されていない場合、 project_dir
は project_name
と同じになります。
使用例:
$ scrapy startproject myproject
genspider¶
- 構文:
scrapy genspider [-t template] <name> <domain>
- プロジェクト: 不要
新しいSpiderをカレントフォルダ、またはプロジェクト内から呼び出された場合は現在のプロジェクトの spiders
フォルダに作成します。 <name>
はSpiderの名前、 <domain>
はSpiderの変数 allowed_domains
および start_urls
を生成するために使用されます。
使用例:
$ scrapy genspider -l
Available templates:
basic
crawl
csvfeed
xmlfeed
$ scrapy genspider example example.com
Created spider 'example' using template 'basic'
$ scrapy genspider -t crawl scrapyorg scrapy.org
Created spider 'scrapyorg' using template 'crawl'
これはあらかじめ定義されたテンプレートに基づいてSpiderを作成する便利なショートカットコマンドですが、Spiderを作成する唯一の方法ではありません。このコマンドを使用する代わりに、Spiderのソースファイルを自分で作成することもできます。
crawl¶
- 構文:
scrapy crawl <spider>
- プロジェクト: 要
Spiderを使用してクロールを開始します。
使用例:
$ scrapy crawl myspider
[ ... myspider starts crawling ... ]
check¶
- 構文:
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
list¶
- 構文:
scrapy list
- プロジェクト: 要
現在のプロジェクトで使用可能なすべてのSpiderを一覧表示します。出力は1行につき1つのSpiderです。
使用例:
$ scrapy list
spider1
spider2
edit¶
- 構文:
scrapy edit <spider>
- プロジェクト: 要
EDITOR
環境変数で定義されたエディタまたは、未設定の場合 EDITOR
設定を使用して、指定されたSpiderを編集します。
このコマンドは、最も一般的なケースの便利なショートカットとして提供されています。もちろん開発者は、Spiderの作成やデバッグをするツールやIDEを自由に選択することができます。
使用例:
$ scrapy edit spider1
fetch¶
- 構文:
scrapy fetch <url>
- プロジェクト: 不要
Scrapyダウンローダーを使用してURLをダウンロードし、標準出力にその内容を出力します。
このコマンドの興味深い点は、Spiderのダウンロードするやり方でページを取得することです。たとえば、Spiderがユーザーエージェントを上書きする USER_AGENT
属性を持っている場合は、それを使用します。
ですから、このコマンドはSpiderが特定のページをどのようにフェッチするかを「見る」ために使うことができます。
プロジェクト外で使用される場合は、Spiderごとの特定の動作は適用されず、デフォルトのScrapyダウンローダーの設定が使用されます。
サポートされるオプション:
--spider=SPIDER
: Spiderの自動検出をバイパスし、特定のSpiderを強制的に使用する--headers
: レスポンスボディの代わりにレスポンスのHTTPヘッダーを表示する--no-redirect
: HTTP 3xxリダイレクトに従わない(デフォルトでは従う)
使用例:
$ 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)']}
view¶
- 構文:
scrapy view <url>
- プロジェクト: 不要
Spiderがそれを「見る」ように、ブラウザで指定されたURLを開きます。Spiderは通常のユーザーとは違うページを表示することがあるため、Spiderが何を見ているかを確認し、期待通りのものであることを確認することができます。
サポートされるオプション:
--spider=SPIDER
: Spiderの自動検出をバイパスし、特定のSpiderを強制的に使用する--no-redirect
: HTTP 3xxリダイレクトに従わない(デフォルトでは従う)
使用例:
$ scrapy view http://www.example.com/some/page.html
[ ... browser starts ... ]
shell¶
- 構文:
scrapy shell [url]
- プロジェクト: 不要
URLが指定されている場合はそのURL、指定されていない場合は空のScrapyシェルを開始します。 ./
や ../
で始まる相対パス、または絶対ファイルパスでのUNIX形式のローカルファイルパスをサポートします。詳細は Scrapy shell を参照してください。
サポートされるオプション:
--spider=SPIDER
: Spiderの自動検出をバイパスし、特定のSpiderを強制的に使用する-c code
: シェルでコードを評価し、結果を出力して終了する--no-redirect
: HTTP 3xxリダイレクトに従わない(デフォルトでは従う)。これは、コマンドラインで引数として渡されたURLにのみ影響します。シェル内では、fetch(url)
はデフォルトでHTTPリダイレクトに従います。
使用例:
$ scrapy shell http://www.example.com/some/page.html
[ ... scrapy shell starts ... ]
$ scrapy shell --nolog http://www.example.com/ -c '(response.status, response.url)'
(200, 'http://www.example.com/')
# shell follows HTTP redirects by default
$ scrapy shell --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c '(response.status, response.url)'
(200, 'http://example.com/')
# you can disable this with --no-redirect
# (only for the URL passed as command line argument)
$ scrapy shell --no-redirect --nolog http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F -c '(response.status, response.url)'
(302, 'http://httpbin.org/redirect-to?url=http%3A%2F%2Fexample.com%2F')
parse¶
- 構文:
scrapy parse <url> [options]
- プロジェクト: 要
指定されたURLを取得し、それを処理するSpiderでパースします。 --callback
オプションがあればそのメソッドを使用し、なければ parse
を使用します。
サポートされるオプション:
--spider=SPIDER
: Spiderの自動検出をバイパスし、特定のSpiderを強制的に使用する--a NAME=VALUE
: Spider引数を設定する(繰り返し可能)--callback
または-c
: レスポンスをパースするためのコールバックとして使用するSpiderのメソッド--meta
または-m
: コールバックリクエストに渡される追加のリクエストメタ情報。これは有効なJSON文字列でなければなりません。例:--meta='{"foo" : "bar"}'
--pipelines
: パイプラインを通じてItemを処理する--rules
または-r
:CrawlSpider
のルールを使用して、レスポンスのパースに使用するコールバック(Spiderのメソッド)を検出する--noitems
: 抽出したItemを表示しない--nolinks
: 抽出したリンクを表示しない--nocolour
: 出力を色分けするためにpygmentsを使わない--depth
または-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': 'Example item',
'category': 'Furniture',
'length': '12 cm'}]
# Requests -----------------------------------------------------------------
[]
settings¶
- 構文:
scrapy settings [options]
- プロジェクト: 不要
Scrapyの設定値を取得します。
プロジェクト内で実行した場合はプロジェクトの設定値が表示され、そうでない場合はScrapyのデフォルトの値が表示されます。
使用例:
$ scrapy settings --get BOT_NAME
scrapybot
$ scrapy settings --get DOWNLOAD_DELAY
0
runspider¶
- 構文:
scrapy runspider <spider_file.py>
- プロジェクト: 不要
プロジェクトを作成していなくても、Pythonファイルに記述したSpiderを実行できます。
使用例:
$ scrapy runspider myspider.py
[ ... spider starts crawling ... ]
version¶
- 構文:
scrapy version [-v]
- プロジェクト: 不要
Scrapyのバージョンを出力します。 -v
と一緒に使用すると、バグレポートに有用なPython、Twisted、プラットフォームの情報も出力されます。
カスタムプロジェクトコマンド¶
また、 COMMANDS_MODULE
設定を使用してカスタムプロジェクトコマンドを追加することもできます。コマンドの実装例については、 scrapy/commands のScrapyコマンドを参照してください。
COMMANDS_MODULE¶
デフォルト: ''
(空文字列)
カスタムScrapyコマンドを検索するためのモジュールです。これは、Scrapyプロジェクトにカスタムコマンドを追加するために使用されます。
例:
COMMANDS_MODULE = 'mybot.commands'
setup.pyエントリポイントを介してコマンドを登録する¶
注釈
これは実験的な機能であり、注意して使用してください。
ライブラリの setup.py
ファイルのエントリポイントに scrapy.commands
セクションを追加することで、外部ライブラリからScrapyコマンドを追加することができます。
次の例では、 my_command
コマンドを追加します。
from setuptools import setup, find_packages
setup(name='scrapy-mymodule',
entry_points={
'scrapy.commands': [
'my_command=my_scrapy_module.commands:MyCommand',
],
},
)