コマンドラインツール

バージョン 0.10 で追加.

Scrapyは、 scrapy コマンドラインツール(ここでは「Scrapyツール」と呼びます)を通じて制御され、単に「コマンド」または「Scrapyコマンド」と呼ばれるサブコマンドと区別します。

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

(「scrapy deploy」コマンドは1.0で削除され、スタンドアロンの「scrapyd-deploy」に置き換えられました。 Deploying your project を参照してください。)

構成(configuration)の設定

Scrapyは、標準の場所にあるはずの、iniファイルスタイルの scrapy.cfg ファイルの構成パラメーターを探します。:

  1. /etc/scrapy.cfg または c:\scrapy\scrapy.cfg (お使いのコンピューターシステム全体の設定)、

  2. ~/.config/scrapy.cfg ($XDG_CONFIG_HOME) and ~/.scrapy.cfg ($HOME) は、当該ユーザー全体の設定で、

  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

プロジェクト間でルートディレクトリを共有する

scrapy.cfg を含むプロジェクトルートディレクトリは、それぞれ独自の設定モジュールを持つ複数のScrapyプロジェクトで共有できます。

その場合、あなたの scrapy.cfg ファイルの [settings] の下で、これらの設定モジュールの1つ以上のエイリアスを定義する必要があります。:

[settings]
default = myproject1.settings
project1 = myproject1.settings
project2 = myproject2.settings

デフォルトでは、 scrapy コマンドラインツールは default 設定を使用します。 scrapy コマンドラインツールを別プロジェクトのために使うには SCRAPY_PROJECT 環境変数を設定します。:

$ 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ツールを使用して、プロジェクトを制御および管理します。

例えば、新しいスパイダーを作成するには、:

scrapy genspider mydomain mydomain.com

一部のScrapyコマンド(crawl のような)は、Scrapyプロジェクト内から実行する必要があります。 プロジェクト内から実行する必要があるコマンドと実行しないコマンドの詳細については、 コマンド リファレンス をご覧ください。

また、一部のコマンドは、プロジェクト内から実行する場合、動作が若干異なる場合があることに注意してください。 たとえば、フェッチされるURLが特定のスパイダーに関連付けられている場合、fetchコマンドはスパイダーによってオーバーライドされる動作(user-agentをオーバーライドする user_agent 属性など)を使用します。 fetch コマンドはスパイダーがどのようにページをダウンロードしているかを確認するために使用されることを意図しているため、これは意図的なものです。

利用可能なツールコマンド

この節には、使用可能な組み込みコマンドの一覧とその説明および使用例が含まれています。 以下のコマンドを実行すると、いつでも各コマンドに関する詳細情報を見ることができます。:

scrapy <command> -h

そして、以下のコマンドですべての利用可能なコマンドの一覧を見ることができます。:

scrapy -h

コマンドには2種類あります。Scrapyプロジェクト内からのみ動作するコマンド(プロジェクト固有のコマンド)とアクティブなScrapyプロジェクトなしで動作するコマンド(グローバルコマンド)です。ただし、プロジェクト内から実行すると動作が若干異なる場合があります(プロジェクトのオーバーライドされた設定を使用するため)。

グローバルコマンド

プロジェクト内のみのコマンド

startproject

  • 文法: scrapy startproject <project_name> [project_dir]

  • Scrapyプロジェクト内で実行させる必要があるか: いいえ

project_dir ディレクトリの下に project_name という名前の新しいScrapyプロジェクトを作成します。 project_dir を指定しなかった場合、 project_dirproject_name と同じになります。

使用例:

$ scrapy startproject myproject

genspider

  • 文法: scrapy genspider [-t template] <name> <domain>

  • Scrapyプロジェクト内で実行させる必要があるか: いいえ

プロジェクト内から呼び出された場合、現在のフォルダーまたは現在のプロジェクトの spiders フォルダーに新しいスパイダーを作成します。 <name> パラメーターはスパイダーの name として設定され、 <domain>``はスパイダー属性の ``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'

これは、事前定義されたテンプレートに基づいてスパイダーを作成する便利なショートカットコマンドですが、スパイダーを作成する唯一の方法ではありません。 このコマンドを使用する代わりに、自分でスパイダーソースコードファイルを作成することもできます。

crawl

  • 文法: scrapy crawl <spider>

  • Scrapyプロジェクト内で実行させる必要があるか: はい

スパイダーを使用してクロールを開始します。

使用例:

$ scrapy crawl myspider
[ ... myspider starts crawling ... ]

check

  • 文法: scrapy check [-l] <spider>

  • Scrapyプロジェクト内で実行させる必要があるか: はい

スパイダーコントラクト チェック を実行します。

使用例:

$ 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

  • Scrapyプロジェクト内で実行させる必要があるか: はい

現在のプロジェクトで利用可能なすべてのスパイダーをリストします。 出力は1行につき1つのスパイダーです。

使用例:

$ scrapy list
spider1
spider2

edit

  • 文法: scrapy edit <spider>

  • Scrapyプロジェクト内で実行させる必要があるか: はい

EDITOR 環境変数または、(未設定の場合) EDITOR 設定で定義されているエディターを使用して、指定されたスパイダーを編集します。

このコマンドは、最も一般的な場合の便利なショートカットとしてのみ提供されています。もちろん開発者は、スパイダーを作成およびデバッグするためのツールまたはIDEを自由に選択できます。

使用例:

$ scrapy edit spider1

fetch

  • 文法: scrapy fetch <url>

  • Scrapyプロジェクト内で実行させる必要があるか: いいえ

Scrapyダウンローダーを使用して指定されたURLをダウンロードし、コンテンツを標準出力に書き込みます。

このコマンドの興味深い点は、ページを取得するのに、あなたのスパイダーを使ってどのようにダウンロードするかを示すということです。たとえば、スパイダーがユーザーエージェントを上書きするUSER_AGENT属性を持っていた場合、上書きしたその属性を使用します。

したがって、このコマンドを使用して、あなたは、あなたのスパイダーが特定のページを取得する方法を「見る」ことができます。

もし、このコマンドがプロジェクトの外部で使用される場合、特定のスパイダーごとの動作は適用されず、デフォルトのScrapyダウンローダー設定が使用されます。

コマンドラインオプション:

  • --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>

  • Scrapyプロジェクト内で実行させる必要があるか: いいえ

あなたのScrapyスパイダーが「見ている」ように、指定されたURLをブラウザーで開きます。 スパイダーは通常のユーザーとは異なるページを見ることがあるので、これを使用してスパイダーが「見ている」ものを確認し、期待どおりであることを確認できます。

コマンドラインオプション:

  • --spider=SPIDER: スパイダーの自動検出をバイパスし、指定のスパイダーの使用を強制する。

  • --no-redirect: HTTP 3xxリダイレクトに従わない(デフォルトではそれらに従う)。

使用例:

$ scrapy view http://www.example.com/some/page.html
[ ... browser starts ... ]

shell

  • 文法: scrapy shell [url]

  • Scrapyプロジェクト内で実行させる必要があるか: いいえ

(指定されている場合)指定したURLでScrapyシェルを開始します。URLが指定されていない場合は空です。 また、UNIXスタイルのローカルファイルパス(「./」または「../」プレフィックス付きの相対パス、または絶対ファイルパス)をサポートします。 詳細については、 Scrapyシェル を参照してください。

コマンドラインオプション:

  • --spider=SPIDER: スパイダーの自動検出をバイパスし、指定のスパイダーの使用を強制する。

  • -c code: シェル内でcodeを評価し、結果を出力してexitする。

  • --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]

  • Scrapyプロジェクト内で実行させる必要があるか: はい

指定されたURLを取得し、 --callback オプションで渡されたメソッドを使用して、または指定されていない場合は parse を使用して、それを処理するスパイダーで解析します。

コマンドラインオプション:

  • --spider=SPIDER: スパイダーの自動検出をバイパスし、指定のスパイダーの使用を強制する。

  • --a NAME=VALUE: スパイダー引数を設定(繰り返し指定可能)

  • --callback または -c: レスポンスを解析するためのコールバックとして使用するスパイダーメソッド

  • --meta または -m: コールバックリクエストに渡される追加のリクエスト meta。 これは有効なJSON文字列でなければなりません。 例: --meta='{"foo" : "bar"}'

  • --cbkwargs: コールバックに渡される追加のキーワード引数。 これは有効なJSON文字列でなければなりません。 例: --cbkwargs='{"foo" : "bar"}'

  • --pipelines: パイプラインを介してアイテムを処理する。

  • --rules または -r: CrawlSpider ルールを使用して、レスポンスの解析に使用するコールバック(スパイダーメソッド)を検出します。

  • --noitems: スクレイプしたアイテムを表示しない。

  • --nolinks: 抽出したリンクを表示しません。

  • --nocolour: pygmentsを使用して出力を色付けするのを回避します。

  • --depth `` または ``-d: リクエストを再帰的に追跡する深さレベル(デフォルト: 1)。

  • --verbose または -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でのその設定のデフォルト値を表示します。

使用例:

$ scrapy settings --get BOT_NAME
scrapybot
$ scrapy settings --get DOWNLOAD_DELAY
0

runspider

  • 文法: scrapy runspider <spider_file.py>

  • Scrapyプロジェクト内で実行させる必要があるか: いいえ

プロジェクトを作成せずに、Pythonファイルに含まれるスパイダーを実行します。

使用例:

$ scrapy runspider myspider.py
[ ... spider starts crawling ... ]

version

  • 文法: scrapy version [-v]

  • Scrapyプロジェクト内で実行させる必要があるか: いいえ

Scrapyバージョンを出力します。 -v とともに使用すると、Python、Twisted、Platformの情報も出力します。これはバグレポートに役立ちます。

bench

バージョン 0.17 で追加.

  • 文法: scrapy bench

  • Scrapyプロジェクト内で実行させる必要があるか: いいえ

簡単なベンチマークテストを実行します。 ベンチマーキング

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

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