コマンドラインツール

バージョン 0.10 で追加.

Scrapyは scrapy コマンドラインツールによって制御できます。ここでは、「コマンド」または「Scrapyコマンド」と呼ばれるサブコマンドと区別するために、「Scrapyツール」と呼びます。

Scrapyツールは複数の目的のためにいくつかのコマンドを提供し、それぞれ異なる引数とオプションのセットを受け入れます。

scrapy deploy コマンドは、スタンドアロンの scrapyd-deploy があるので、バージョン1.0で削除されました。 Deploying your project を参照してください。)

環境設定

Scrapyは、以下の標準的な場所にあるini形式の scrapy.cfg ファイルを探します。

  1. /etc/scrapy.cfg または c:\scrapy\scrapy.cfg (システム全体)
  2. ユーザー全体の設定として ~/.config/scrapy.cfg ($XDG_CONFIG_HOME) と ~/.scrapy.cfg
  3. Scrapyプロジェクトのルートの scrapy.cfg (次のセクションを参照)

これらのファイルの設定は、優先順位によりマージされます。ユーザー定義の値はシステム全体の設定よりも優先され、プロジェクトの設定が定義されている場合は、他のすべての設定を上書きします。

また、Scrapyの設定として使えるいくつかの環境変数があります。

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_dirmyproject と指定した場合と同じになります。

次に、作成したプロジェクトディレクトリの中に入ります。

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_dirproject_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、プラットフォームの情報も出力されます。

bench

バージョン 0.17 で追加.

  • 構文: scrapy bench
  • プロジェクト: 不要

クイックベンチマークテストを実行します。 Benchmarking を参照してください。

カスタムプロジェクトコマンド

また、 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',
    ],
  },
 )