設定

Scrapy設定を使用すると、コア、拡張機能、パイプライン、スパイダー自体を含むすべてのScrapyコンポーネントの動作をカスタマイズできます。

設定のインフラストラクチャは、コードが構成値を取得するために使用できるキーと値のマッピングのグローバル名前空間を提供します。設定は、以下で説明するさまざまなメカニズムを使用して設定できます。

設定は、(多くの場合)現在アクティブなScrapyプロジェクトを選択するためのメカニズムでもあります。

利用可能な組み込み設定のリストについては、 組み込みの設定リファレンス を参照してください。

設定の指定

あなたがScrapyを使用するときは、あなたは使用している設定を伝える必要があります。これを行うには、環境変数 SCRAPY_SETTINGS_MODULE を使用します。

SCRAPY_SETTINGS_MODULE の値は、Pythonパス構文である必要があります。例えば myproject.settings です。設定モジュールはPythonの インポート検索パス にある必要があることに注意してください。

設定の入力

設定は、それぞれ異なる優先順位を持つさまざまなメカニズムを使用して入力できます。 優先順位の降順でそれらのリストを示します:

  1. コマンド・ライン・オプション(最優先)

  2. スパイダーごとの設定

  3. プロジェクト設定モジュール

  4. コマンドごとのデフォルト設定

  5. デフォルトのグローバル設定(最も優先度が低い)

これらの設定ソースの入力は内部的に処理されますが、API呼び出しを使用して手動で処理することができます。 参考として APIの設定 トピックを参照してください。

これらのメカニズムについては、以下で詳しく説明します。

1. コマンド・ライン・オプション

コマンドラインで提供される引数は、他のオプションより優先され、最も優先される引数です。 ` -s`` (または --set )コマンドラインオプションを使用して、1つ(または複数)の設定を明示的にオーバーライドできます。

例:

scrapy crawl myspider -s LOG_FILE=scrapy.log

2. スパイダーごとの設定

スパイダー( スパイダー 参照)は、プロジェクト設定を優先して上書きする独自の設定を定義できます。 そのためには custom_settings 属性を設定します:

class MySpider(scrapy.Spider):
    name = 'myspider'

    custom_settings = {
        'SOME_SETTING': 'some value',
    }

3. プロジェクト設定モジュール

プロジェクト設定モジュールは、Scrapyプロジェクトの標準構成ファイルであり、ほとんどのカスタム設定がそこに入力されます。 標準のScrapyプロジェクトの場合、これは、プロジェクト用に作成された settings.py ファイルの設定を追加または変更することを意味します。

4. コマンドごとのデフォルト設定

Scrapyツール コマンドには、グローバルなデフォルト設定を上書きする独自のデフォルト設定を含めることができます。これらのカスタム・コマンド設定は、コマンド・クラスの default_settings 属性で指定されます。

5. デフォルトのグローバル設定

グローバルなデフォルトは scrapy.settings.default_settings モジュールにあり、 組み込みの設定リファレンス で文書化されています。

パス達やクラス達のインポート

バージョン 2.4.0 で追加.

設定がクラスや関数など、Scrapyによってインポートされる呼び出し可能なオブジェクトを参照する場合、そのオブジェクトを指定する2つの異なる方法があります:

  • そのオブジェクトのインポート・パス(path)を含む文字列として

  • オブジェクト自体として

例:

from mybot.pipelines.validate import ValidateMyItem
ITEM_PIPELINES = {
    # passing the classname...
    ValidateMyItem: 300,
    # ...equals passing the class path
    'mybot.pipelines.validate.ValidateMyItem': 300,
}

注釈

呼び出し不可能なオブジェクトの受け渡しはサポートされていません。

設定にアクセスする方法

スパイダーでは、設定は self.settings から利用できます:

class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://example.com']

    def parse(self, response):
        print(f"Existing settings: {self.settings.attributes.keys()}")

注釈

settings 属性は、スパイダーが初期化された後にベースSpiderクラスで設定されます。初期化の前に設定を使用する場合(たとえば、スパイダーの __init__() メソッドで)、 from_crawler() メソッドをオーバーライドする必要があります。

設定には、拡張機能、ミドルウェア、アイテム・パイプラインの from_crawler メソッドに渡されるクローラーの scrapy.crawler.Crawler.settings 属性からアクセスできます:

class MyExtension:
    def __init__(self, log_is_enabled=False):
        if log_is_enabled:
            print("log is enabled!")

    @classmethod
    def from_crawler(cls, crawler):
        settings = crawler.settings
        return cls(settings.getbool('LOG_ENABLED'))

設定オブジェクトは辞書のように使用できます(例: settings['LOG_ENABLED'] )。ただし、通常、タイプ・エラーを回避するために必要な形式で設定を抽出し、 Settings APIで提供されるメソッドの1つを使用することをお勧めします。

名前を設定する理由

設定名には通常、構成するコンポーネントの接頭辞が付きます。 たとえば、架空のrobots.txt拡張子の適切な設定名は、 ROBOTSTXT_ENABLEDROBOTSTXT_OBEYROBOTSTXT_CACHEDIR などになります。

組み込みの設定リファレンス

以下に、利用可能なすべてのスクレイピー設定のリストをアルファベット順に、デフォルト値と適用範囲とともに示します。

使用可能な場所では、スコープは、特定のコンポーネントに関連付けられている場合、設定が使用されている場所を示します。 その場合、そのコンポーネントのモジュールは通常、拡張機能、ミドルウェア、またはパイプラインが表示されます。 また、設定を有効にするには、コンポーネントを有効にする必要があります。

AWS_ACCESS_KEY_ID

デフォルト: None

S3フィードストレージバックエンド など、 Amazon Web services へのアクセスを必要とするコードで使用されるAWSアクセスキー。

AWS_SECRET_ACCESS_KEY

デフォルト: None

S3フィード・ストレージ・バックエンド など、 Amazon Web services へのアクセスを必要とするコードで使用されるAWSシークレット・キー

AWS_ENDPOINT_URL

デフォルト: None

Minioやs3.scalityなど、S3のようなストレージに使用されるエンドポイントURL。

AWS_USE_SSL

デフォルト: None

S3またはS3のようなストレージとの通信でSSL接続を無効にする場合は、このオプションを使用します。デフォルトではSSLが使用されます。

AWS_VERIFY

デフォルト: None

ScrapyとS3またはS3のようなストレージ間のSSL接続を検証(verify)します。デフォルトでは、SSL検証(verify)が行われます。

AWS_REGION_NAME

デフォルト: None

AWSクライアントに関連付けられているリージョンの名前。

ASYNCIO_EVENT_LOOP

デフォルト: None

指定された asyncio イベント・ループ・クラスのインポート・パス。

asyncioリアクターが有効になっている場合(TWISTED_REACTOR 参照)、この設定を使用してasyncioイベント・ループを指定することができます。設定を目的のasyncioイベント・ループ・クラスのインポート・パスに設定します。設定が None に設定されている場合、デフォルトのasyncioイベント・ループを使用します。。

install_reactor() 関数を使用して非同期リアクターを手動でインストールする場合、 event_loop_path パラメータを使用して、使用するイベント・ループ・クラスのインポート・パスを指定できます。

イベント・ループ・クラスは asyncio.AbstractEventLoop を継承する必要があることに注意してください。

注意

以下をご了承ください:デフォルト以外のイベントループ (ASYNCIO_EVENT_LOOP で定義するか、 install_reactor() でインストール) を使用する場合、Scrapy は asyncio.set_event_loop() を呼び出します。これにより、指定されたイベント・ループが現在のOSスレッドの現在のループとして設定されます。

BOT_NAME

デフォルト: 'scrapybot'

このScrapyプロジェクトによって実装されるボット(bot)の名前(プロジェクト名とも呼ばれます)。この名前はロギングにも使用されます。

startproject コマンドでプロジェクトを作成すると、プロジェクト名が自動的に入力されます。

CONCURRENT_ITEMS

デフォルト: 100

item パイプライン で並行して処理する(レスポンスごとの)同時アイテムの最大数。

CONCURRENT_REQUESTS

デフォルト: 16

Scrapyダウンローダーが実行する並列(すなわち同時)リクエストの最大数。

CONCURRENT_REQUESTS_PER_DOMAIN

デフォルト: 8

任意の単一ドメインに対して実行される並列(すなわち同時)リクエストの最大数。

AutoThrottle拡張機能 と、その AUTOTHROTTLE_TARGET_CONCURRENCY オプションを参照して下さい。

CONCURRENT_REQUESTS_PER_IP

デフォルト: 0

単一のIPに対して実行される並行(すなわち同時)リクエストの最大数。 ゼロ以外の場合、 CONCURRENT_REQUESTS_PER_DOMAIN 設定は無視され、代わりにこの設定が使用されます。 つまり、並列実行制限はドメインごとではなくIPごとに適用されます。

この設定は、 DOWNLOAD_DELAYAutoThrottle拡張機能 にも影響します。 CONCURRENT_REQUESTS_PER_IP がゼロ以外の場合、ダウンロード遅延はドメインごとではなくIPごとに適用されます。

DEFAULT_ITEM_CLASS

デフォルト: 'scrapy.item.Item'

Scrapyシェル 内のアイテムのインスタンス化に使用されるデフォルト・クラス。

DEFAULT_REQUEST_HEADERS

デフォルト:

{
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en',
}

Scrapy HTTPリクエストに使用されるデフォルトのヘッダー。それらは DefaultHeadersMiddleware に取り込まれます。

注意

Cookie ヘッダーを介して設定されたクッキーは、 CookiesMiddleware では考慮されません。 リクエストにクッキーを設定する必要がある場合は、 Request.cookies パラメータを使用します。 これは、現在改善に取り組んでいる既知の制限です。

DEPTH_LIMIT

デフォルト: 0

スコープ: scrapy.spidermiddlewares.depth.DepthMiddleware

任意のサイトでクロールできる最大深度。 ゼロの場合、制限は課されません。

DEPTH_PRIORITY

デフォルト: 0

スコープ: scrapy.spidermiddlewares.depth.DepthMiddleware

深さに基づいて Requestpriority を調整するために使用される整数。

リクエストの優先度は次のように調整されます:

request.priority = request.priority - ( depth * DEPTH_PRIORITY )

深さが増加すると、 DEPTH_PRIORITY の正の値はリクエストの優先度(BFO)を下げ、負の値はリクエストの優先度(DFO)を上げます。 Scrapyは幅(breadth)優先または深さ(depth)優先でクロールしますか? も参照してください。

注釈

この設定は、他の優先度設定 REDIRECT_PRIORITY_ADJUSTRETRY_PRIORITY_ADJUST と比較して、 逆の方法で 優先度を調整します。

DEPTH_STATS_VERBOSE

デフォルト: False

スコープ: scrapy.spidermiddlewares.depth.DepthMiddleware

詳細な統計情報を収集するかどうか。これが有効になっている場合、各深さのリクエスト数が統計に収集されます。

DNSCACHE_ENABLED

デフォルト: True

DNSイン・メモリ・キャッシュを有効にするかどうか。

DNSCACHE_SIZE

デフォルト: 10000

DNSイン・メモリ・キャッシュ・サイズ。

DNS_RESOLVER

バージョン 2.0 で追加.

デフォルト: 'scrapy.resolver.CachingThreadedResolver'

DNS名を解決するために使用されるクラス。デフォルトの scrapy.resolver.CachingThreadedResolverDNS_TIMEOUT 設定によるDNSリクエストのタイムアウトの指定をサポートしていますが、IPv4 アドレスでのみ機能します。Scrapyは代替のリゾルバ scrapy.resolver.CachingHostnameResolver を提供します。これは IPv4/IPv6 アドレスをサポートしますが DNS_TIMEOUT 設定を考慮しません。

DNS_TIMEOUT

デフォルト: 60

DNSクエリの処理のタイムアウト(秒)。float値がサポートされています。

DOWNLOADER

デフォルト: 'scrapy.core.downloader.Downloader'

クロールに使用するダウンローダー。

DOWNLOADER_HTTPCLIENTFACTORY

デフォルト: 'scrapy.core.downloader.webclient.ScrapyHTTPClientFactory'

( HTTP10DownloadHandler の場合、) HTTP/1.0接続に使用する Twisted protocol.ClientFactory クラスを定義します。

注釈

HTTP/1.0 は最近ではめったに使用されないため、 本当に HTTP/1.0 を使用しかつ、 'scrapy.core.downloader.handlers.http.HTTP10DownloadHandler' に応じて http(s) スキームの DOWNLOAD_HANDLERS をオーバーライドしたい場合を除き、この設定は無視しても問題ありません。

DOWNLOADER_CLIENTCONTEXTFACTORY

デフォルト: 'scrapy.core.downloader.contextfactory.ScrapyClientContextFactory'

使用するContextFactoryへのクラスパスを表します。

ここで、ContextFactoryはSSL/TLSコンテキストのTwisted用語であり、使用するTLS/SSLプロトコルのバージョン、証明書の検証(verification)を行うか、クライアント側の認証を有効にするかなどを定義します。

注釈

Scrapyデフォルト・コンテキスト・ファクトリは リモート・サーバー証明書の検証を実行しません 。これは通常、Webスクレイピングに適しています。

リモート・サーバー証明書の検証を有効にする必要がある場合、Scrapyには設定可能な別のコンテキスト・ファクトリ・クラス 'scrapy.core.downloader.contextfactory.BrowserLikeContextFactory' があり、プラットフォームの証明書を使用してリモート・エンドポイントを検証します。

カスタムContextFactoryを使用する場合、その __init__ メソッドが method パラメーター(これは OpenSSL.SSL メソッド・マッピング DOWNLOADER_CLIENT_TLS_METHOD です)と tls_verbose_logging'' パラメーター( ``bool ) と tls_ciphers パラメーター( DOWNLOADER_CLIENT_TLS_CIPHERS 参照)を受け入れる事を確認して下さい。

DOWNLOADER_CLIENT_TLS_CIPHERS

デフォルト: 'DEFAULT'

この設定を使用して、デフォルトの HTTP/1.1 ダウンローダーが使用するTLS/SSL暗号cipher)をカスタマイズします。

設定にはOpenSSL暗号リスト形式(OpenSSL cipher list format)の文字列が含まれている必要があります。これらの暗号はクライアント暗号として使用されます。 特定のHTTPS Webサイトにアクセスするには、この設定の変更が必要になる場合があります。たとえば、弱いDHパラメーターを持つWebサイトに 'DEFAULT:!DH' を使用しするか、または、Webサイトが要求しない場合は DEFAULT 含まれない特定の暗号を有効にする必要があります。

DOWNLOADER_CLIENT_TLS_METHOD

デフォルト: 'TLS'

この設定を使用して、デフォルトの HTTP/1.1 ダウンローダーが使用するTLS/SSLメソッドをカスタマイズします。

この設定は、次の文字列値のいずれかでなければなりません:

  • 'TLS': これはOpenSSLの TLS_method() (別名 SSLv23_method() )にマップします。これにより、プラットフォームでサポートされる最高のものからプロトコル・ネゴシエーションが可能になります。 これがデフォルトかつ推奨です

  • 'TLSv1.0': この値は、HTTPS接続がTLSバージョン1.0を使用するように強制します。Scrapy<1.1 の動作が必要な場合はこれを設定します

  • 'TLSv1.1': TLS バージョン 1.1 の使用を強制します

  • 'TLSv1.2': TLS バージョン 1.2 の使用を強制します

  • 'SSLv3': SSL バージョン3の使用を強制します ( 非推奨 )

DOWNLOADER_CLIENT_TLS_VERBOSE_LOGGING

デフォルト: False

これを True に設定すると、HTTPS接続を確立した後、TLS接続パラメーターに関するDEBUGレベルのメッセージが有効になります。記録される情報の種類は、OpenSSLおよびpyOpenSSLのバージョンによって異なります。

この設定は、デフォルトの DOWNLOADER_CLIENTCONTEXTFACTORY にのみ使用されます。

DOWNLOADER_MIDDLEWARES

デフォルト:: {}

プロジェクトで有効になっているダウンローダー・ミドルウェアとその順序を含む辞書。詳細については、 ダウンローダーミドルウェアをアクティブにする を参照してください。

DOWNLOADER_MIDDLEWARES_BASE

デフォルト:

{
    'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100,
    'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300,
    'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350,
    'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 400,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 500,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550,
    'scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware': 560,
    'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590,
    'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600,
    'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750,
    'scrapy.downloadermiddlewares.stats.DownloaderStats': 850,
    'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900,
}

Scrapyでデフォルトで有効になっているダウンローダー・ミドルウェアを含む辞書。 低次はエンジンに近く、高次はダウンローダーに近いです。プロジェクト内でこの設定を変更しないでください。代わりに DOWNLOADER_MIDDLEWARES を変更してください。詳細については、 ダウンローダーミドルウェアをアクティブにする を参照してください。

DOWNLOADER_STATS

デフォルト: True

ダウンローダー統計収集を有効にするかどうか。

DOWNLOAD_DELAY

デフォルト: 0

ダウンローダーが同じWebサイトから連続したページをダウンロードするまで待機する時間(秒)。 これを使用してクロール速度を調整し、サーバーへの過度のヒットを回避できます。10進数がサポートされています。 例:

DOWNLOAD_DELAY = 0.25    # 250 ms of delay

この設定は、 RANDOMIZE_DOWNLOAD_DELAY 設定(デフォルトで有効)の影響も受けます。デフォルトでは、Scrapyはリクエスト間で一定の時間を待機する訳ではなく、(0.5 * DOWNLOAD_DELAY ) から ( 1.5 * DOWNLOAD_DELAY )の間のランダムな間隔を使用します。

CONCURRENT_REQUESTS_PER_IP がゼロ以外の場合、遅延はドメインごとではなくIPアドレスごとに適用されます。

あなたは download_delay スパイダー属性を設定することで、スパイダーごとにこの設定を変更することもできます。

DOWNLOAD_HANDLERS

デフォルト: {}

プロジェクトで有効にされたリクエスト・ダウンローダー・ハンドラーを含む辞書。 形式の例については、 DOWNLOAD_HANDLERS_BASE を参照してください。

DOWNLOAD_HANDLERS_BASE

デフォルト:

{
    'file': 'scrapy.core.downloader.handlers.file.FileDownloadHandler',
    'http': 'scrapy.core.downloader.handlers.http.HTTPDownloadHandler',
    'https': 'scrapy.core.downloader.handlers.http.HTTPDownloadHandler',
    's3': 'scrapy.core.downloader.handlers.s3.S3DownloadHandler',
    'ftp': 'scrapy.core.downloader.handlers.ftp.FTPDownloadHandler',
}

Scrapyでデフォルトで有効になっているリクエスト・ダウンロード・ハンドラーを含む辞書。 プロジェクトのこの設定を変更するのではなく、代わりに DOWNLOAD_HANDLERS を変更してください。

DOWNLOAD_HANDLERS でURIスキームに None を割り当てることで、これらのダウンロード・ハンドラーを無効にできます。たとえば、組み込みFTPハンドラーを(置換なしで)無効にするには、これを settings.py に配置します:

DOWNLOAD_HANDLERS = {
    'ftp': None,
}

デフォルトの HTTPS ハンドラーは HTTP/1.1 を使用します。 HTTP/2 アップデートを使用するには、以下のように DOWNLOAD_HANDLERS を使用します:

DOWNLOAD_HANDLERS = {
    'https': 'scrapy.core.downloader.handlers.http2.H2DownloadHandler',
}

警告

Scrapy での HTTP/2 サポートは実験的であり、実稼働環境ではまだ推奨されていません。 将来の Scrapy バージョンでは、非推奨期間や警告なしに関連する変更が導入される可能性があります。

注釈

Scrapyの現在の HTTP/2 実装の既知の制限は以下のとおりです:

  • 主要なブラウザは暗号化されていない HTTP/2 をサポートしていないため、HTTP/2 Cleartext (h2c) はサポートしていません( http2 faq 参照)。

  • デフォルト値の 16384 より大きい最大 frame size を指定する設定はありません。それより大きなフレームを送信するサーバーへの接続は失敗します。

  • server pushes はサポートされていません。無視されます。

  • bytes_receivedheaders_received シグナルはサポートされていません。

DOWNLOAD_TIMEOUT

デフォルト: 180

ダウンローダーがタイムアウトするまで待機する時間(秒)。

注釈

このタイムアウトは、 download_timeout スパイダー属性を使用してスパイダーごとに設定でき、 download_timeout Request.metaキーを使用してリクエストごとに設定できます。

DOWNLOAD_MAXSIZE

デフォルト: 1073741824 (1024MB)

ダウンローダーがダウンロードする最大レスポンス・サイズ(バイト単位)。

無効にしたい場合は0をセットします。

注釈

このサイズは、スパイダー属性 download_maxsize を使用してスパイダーごとに設定し、リクエストごとに download_maxsize Request.metaキーを使用して設定できます。

DOWNLOAD_WARNSIZE

デフォルト: 33554432 (32MB)

ダウンローダーが警告し始めるレスポンス・サイズ(バイト単位)。

無効にしたい場合は0をセットします。

注釈

download_warnsize スパイダー属性を使用してスパイダーごとにこのサイズを設定し、 download_warnsize Request.metaキーを使用してリクエストごとに設定できます。

DOWNLOAD_FAIL_ON_DATALOSS

デフォルト: True

壊れた応答で失敗するかどうか、つまり、宣言された Content-Length がサーバーによって送信されたコンテンツと一致しないか、チャンクされた応答が適切に終了しませんでした。 True の場合、これらのレスポンスは ResponseFailed([_DataLoss]) エラーを発生させます。 False の場合、これらのレスポンスはパス・スルーされ、フラグ dataloss がレスポンスに追加されます。すなわち、response.flagsの 'dataloss'True です。

オプションで、これは download_fail_on_dataloss Request.metaキーを False に使用することで、リクエストごとに設定できます。

注釈

サーバーの設定ミスからネットワークエラー、データ破損まで、いくつかの状況下で、レスポンスの破損、またはデータ損失エラーが発生する場合があります。 部分的なコンテンツや不完全なコンテンツが含まれている可能性があることを考慮して、壊れたレスポンスを処理することが理にかなっているかどうかを判断するのはユーザーの責任です。本設定が True に設定されていて、かつ RETRY_ENABLEDTrue に設定されている場合、 ResponseFailed([_DataLoss]) の失敗は通常どおり再試行されます。

警告

この設定は H2DownloadHandler ダウンロードハンドラでは無視されます (DOWNLOAD_HANDLERS を参照)。 データ損失エラーの場合、対応する HTTP/2 接続が破損し、同じ接続を使用する他のリクエストに影響を与える可能性があります。 したがって、その接続を使用していたすべてのリクエストに対して、常に ResponseFailed([InvalidBodyLengthError]) 失敗が発生します。

DUPEFILTER_CLASS

デフォルト: 'scrapy.dupefilters.RFPDupeFilter'

重複したリクエストを検出およびフィルタリングするために使用されるクラス。

デフォルト( RFPDupeFilter )は scrapy.utils.request.request_fingerprint 関数を使用してリクエストのフィンガー・プリントに基づいてフィルターします。重複のチェック方法を変更するには、 RFPDupeFilter をサブクラス化し、その request_fingerprint メソッドをオーバーライドします。このメソッドは、scrapy Request オブジェクトを受け入れ、そのフィンガー・プリント(文字列)を返す必要があります。

DUPEFILTER_CLASS'scrapy.dupefilters.BaseDupeFilter' に設定することで、重複したリクエストのフィルタリングを無効にできます。ただし、クロール・ループに入る可能性があるため、これには十分注意してください。通常、フィルタリングしない特定の Requestdont_filter パラメーターを True に設定することをお勧めします。

DUPEFILTER_DEBUG

デフォルト: False

デフォルトでは、 RFPDupeFilter は最初の重複リクエストのみを記録します。 DUPEFILTER_DEBUGTrue に設定すると、重複するすべてのリクエストがログに記録されます。

EDITOR

デフォルト: vi (Unixシステムの場合)、またはIDLEエディター(Windowsの場合)

edit コマンドでスパイダーを編集するために使用するエディター。さらに、 EDITOR 環境変数が設定されている場合、 edit コマンドはデフォルト設定よりもそれを優先します。

EXTENSIONS

デフォルト:: {}

プロジェクトで有効になっている拡張機能とその順序を含む辞書。

EXTENSIONS_BASE

デフォルト:

{
    'scrapy.extensions.corestats.CoreStats': 0,
    'scrapy.extensions.telnet.TelnetConsole': 0,
    'scrapy.extensions.memusage.MemoryUsage': 0,
    'scrapy.extensions.memdebug.MemoryDebugger': 0,
    'scrapy.extensions.closespider.CloseSpider': 0,
    'scrapy.extensions.feedexport.FeedExporter': 0,
    'scrapy.extensions.logstats.LogStats': 0,
    'scrapy.extensions.spiderstate.SpiderState': 0,
    'scrapy.extensions.throttle.AutoThrottle': 0,
}

Scrapyでデフォルトで使用可能な拡張機能とその順序を含む辞書。この設定には、すべての安定した組み込み拡張機能が含まれています。それらのいくつかは設定によって有効にする必要があることに留意してください。

詳細については、 拡張機能ユーザーガイド および 利用可能な拡張機能のリスト を参照してください。

FEED_TEMPDIR

Feed Temp dirでは、 FTPフィード・ストレージAmazon S3 でアップロードする前に、クローラーの一時ファイルを保存するカスタム・フォルダーを設定できます。

FEED_STORAGE_GCS_ACL

アイテムを Google Cloud Storage に保存するときに使用されるアクセス制御リスト (ACL)。 この値の設定方法の詳細については、 Google Cloud documentationJSON API コラムを参照してください。

FTP_PASSIVE_MODE

デフォルト: True

FTP転送を開始するときにパッシブモードを使用するかどうか。

FTP_PASSWORD

デフォルト: "guest"

Request メタに "ftp_password" がない場合にFTP接続に使用するパスワード。

注釈

RFC 1635 を意訳すると、匿名FTPにはパスワード "guest" または自分の電子メールアドレスを使用するのが一般的ですが、一部のFTPサーバーは、ユーザーの電子メールアドレスを明示的に要求し、 "guest" パスワードでのログインを許可しません。

FTP_USER

デフォルト: "anonymous"

Request メタに "ftp_user" がない場合にFTP接続に使用するユーザー名。

GCS_PROJECT_ID

デフォルト: None

Google Cloud Storage にデータを保存するときに使用されるプロジェクトID。

ITEM_PIPELINES

デフォルト: {}

使用するアイテム・パイプラインとその順序を含む辞書。 順序の値は任意ですが、0〜1000の範囲で定義するのが一般的です。 低いオーダーは高いオーダーの前に処理されます。

例:

ITEM_PIPELINES = {
    'mybot.pipelines.validate.ValidateMyItem': 300,
    'mybot.pipelines.validate.StoreMyItem': 800,
}

ITEM_PIPELINES_BASE

デフォルト: {}

Scrapyでデフォルトで有効になっているパイプラインを含む辞書。プロジェクトでこの設定を変更することは決してせず、代わりに ITEM_PIPELINES を変更してください。

LOG_ENABLED

デフォルト: True

ロギングを有効にするかどうか。

LOG_ENCODING

デフォルト: 'utf-8'

ロギングに使用するエンコード。

LOG_FILE

デフォルト: None

ログ出力に使用するファイル名。 None の場合、標準エラーが使用されます。

LOG_FORMAT

デフォルト: '%(asctime)s [%(name)s] %(levelname)s: %(message)s'

ログ・メッセージをフォーマットするための文字列。 利用可能なプレース・ホルダーの全リストについては、 Python logging documentation を参照してください。

LOG_DATEFORMAT

デフォルト: '%Y-%m-%d %H:%M:%S'

日付/時刻をフォーマットするための文字列、 LOG_FORMAT%(asctime)s プレース・ホルダーの展開。 利用可能なディレクティブのリストについては、 Python datetime documentation を参照してください。

LOG_LEVEL

デフォルト: 'DEBUG'

記録する最小レベル。 利用可能なレベルは、CRITICAL、ERROR、WARNING、INFO、DEBUG です。詳細については、ロギング(logging) を参照してください。

LOG_STDOUT

デフォルト: False

True の場合、処理のすべての標準出力(およびエラー)がログにリダイレクトされます。 たとえば、 print('hello') の場合、Scrapyログに表示されます。

LOG_SHORT_NAMES

デフォルト: False

True の場合、ログにはルート・パスのみが含まれます。 False に設定されている場合、ログ出力を担当するコンポーネントが表示されます

LOGSTATS_INTERVAL

デフォルト: 60.0

LogStats による統計の各ログ出力間の間隔(秒単位)。

MEMDEBUG_ENABLED

デフォルト: False

メモリデバッグを有効にするかどうか。

MEMDEBUG_NOTIFY

デフォルト: []

メモリ・デバッグが有効になっている場合、この設定が空でない場合、指定されたアドレスにメモリレポートが送信されます。そうでない場合、レポートはログに書き込まれます。

例:

MEMDEBUG_NOTIFY = ['user@example.com']

MEMUSAGE_ENABLED

デフォルト: True

スコープ: scrapy.extensions.memusage

メモリ使用量拡張機能を有効にするかどうか。 この拡張機能は、プロセスが使用するピークメモリを追跡します(統計に書き込みます)。また、オプションで、メモリ制限を超えたときにScrapyプロセスをシャットダウンし( MEMUSAGE_LIMIT_MB を参照)、それが発生したときに電子メールで通知することができます( MEMUSAGE_NOTIFY_MAIL を参照)。

メモリ使用量の拡張機能 参照。

MEMUSAGE_LIMIT_MB

デフォルト: 0

スコープ: scrapy.extensions.memusage

(MEMUSAGE_ENABLEDがTrueの場合、)Scrapyをシャットダウンする前に許可するメモリの最大量(メガバイト単位)。ゼロの場合、チェックは実行されません。

メモリ使用量の拡張機能 参照。

MEMUSAGE_CHECK_INTERVAL_SECONDS

デフォルト: 60.0

スコープ: scrapy.extensions.memusage

メモリ使用量拡張 は、現在のメモリ使用量と、 MEMUSAGE_LIMIT_MB および MEMUSAGE_WARNING_MB で設定された制限を一定の時間間隔でチェックします。

これにより、これらの間隔の長さが秒単位で設定されます。

メモリ使用量の拡張機能 参照。

MEMUSAGE_NOTIFY_MAIL

デフォルト: False

スコープ: scrapy.extensions.memusage

メモリ制限に達した場合に通知する電子メールのリスト。

例:

MEMUSAGE_NOTIFY_MAIL = ['user@example.com']

メモリ使用量の拡張機能 参照。

MEMUSAGE_WARNING_MB

デフォルト: 0

スコープ: scrapy.extensions.memusage

通知する警告メールを送信する前に許可するメモリの最大量(メガバイト単位)。ゼロの場合、警告は生成されません。

NEWSPIDER_MODULE

デフォルト: ''

genspider コマンドを使用して新しいスパイダーを作成するモジュール。

例:

NEWSPIDER_MODULE = 'mybot.spiders_dev'

RANDOMIZE_DOWNLOAD_DELAY

デフォルト: True

有効にすると、Scrapyはランダムな時間(0.5 * DOWNLOAD_DELAY)から(1.5 * DOWNLOAD_DELAY)の間待機し、同じWebサイトからリクエストを取得します。

このランダム化により、リクエストを分析し、リクエスト間の時間の統計的に有意な類似性を探しているサイトによってクローラーが検出される(そしてその後ブロックされる)機会が減少します。

ランダム化ポリシーは、 wget--random-wait オプションで使用されるものと同じです。

DOWNLOAD_DELAY がゼロ(デフォルト)の場合、このオプションは効果がありません。

REACTOR_THREADPOOL_MAXSIZE

デフォルト: 10

Twistedリアクター・スレッド・プール・サイズの最大制限。 これは、さまざまなScrapyコンポーネントで使用される一般的な多目的スレッド・プールです。スレッドDNSリゾルバー、BlockingFeedStorage、S3FilesStoreなどがあります。ブロッキングIOが不十分な問題が発生している場合は、この値を増やします。

REDIRECT_PRIORITY_ADJUST

デフォルト: +2

スコープ: scrapy.downloadermiddlewares.redirect.RedirectMiddleware

元のリクエストに対するリダイレクト・リクエストの優先度を調整する:

  • 正の優先度調整(デフォルト)は、より高い優先度を意味します

  • 負の優先度調整は、より低い優先度を意味します。

ROBOTSTXT_OBEY

デフォルト: False

スコープ: scrapy.downloadermiddlewares.robotstxt

有効にすると、Scrapyはrobots.txtポリシーを尊重します。 詳細については、 RobotsTxtMiddleware を参照してください。

注釈

歴史的な理由からデフォルト値は False ですが、このオプションは scrapy startproject コマンドによって生成されたsettings.pyファイルでデフォルトで有効になっています。

ROBOTSTXT_PARSER

デフォルト: 'scrapy.robotstxt.ProtegoRobotParser'

robots.txt ファイルの解析に使用するパーサー・バックエンド。詳細については、 RobotsTxtMiddleware を参照してください。

ROBOTSTXT_USER_AGENT

デフォルト: None

robots.txtファイルでの照合に使用するユーザー・エージェント文字列。 None の場合、リクエストで送信するUser-Agentヘッダーまたは USER_AGENT 設定は、(この順序で、)robots.txtファイルで使用するユーザー・エージェントを決定するために使用されます。

SCHEDULER

デフォルト: 'scrapy.core.scheduler.Scheduler'

クロールに使用するスケジューラー。

SCHEDULER_DEBUG

デフォルト: False

True に設定すると、リクエスト・スケジューラに関するデバッグ情報が記録されます。 現在、リクエストをディスクにシリアル化できない場合にログに記録されます(1回のみ)。 統計カウンター(scheduler/unserializable)は、これが発生した回数を追跡します。

ログのエントリの例:

1956-01-31 00:00:00+0800 [scrapy.core.scheduler] ERROR: Unable to serialize request:
<GET http://example.com> - reason: cannot serialize <Request at 0x9a7c7ec>
(type Request)> - no more unserializable requests will be logged
(see 'scheduler/unserializable' stats counter)

SCHEDULER_DISK_QUEUE

デフォルト: 'scrapy.squeues.PickleLifoDiskQueue'

スケジューラが使用するディスク・キューのタイプ。 他の利用可能なタイプは、 scrapy.squeues.PickleFifoDiskQueuescrapy.squeues.MarshalFifoDiskQueuescrapy.squeues.MarshalLifoDiskQueue です。

SCHEDULER_MEMORY_QUEUE

デフォルト: 'scrapy.squeues.LifoMemoryQueue'

スケジューラが使用するメモリ内キューのタイプ。その他の利用可能なタイプは、 scrapy.squeues.FifoMemoryQueue です。

SCHEDULER_PRIORITY_QUEUE

デフォルト: 'scrapy.pqueues.ScrapyPriorityQueue'

スケジューラが使用する優先度キューのタイプ。 別の利用可能なタイプは scrapy.pqueues.DownloaderAwarePriorityQueue です。 多数の異なるドメインを並行してクロールする場合、scrapy.pqueues.DownloaderAwarePriorityQueuescrapy.pqueues.ScrapyPriorityQueue よりも適切に機能します。しかし、現在 scrapy.pqueues.DownloaderAwarePriorityQueueCONCURRENT_REQUESTS_PER_IP と一緒には機能しません。

SCRAPER_SLOT_MAX_ACTIVE_SIZE

バージョン 2.0 で追加.

デフォルト: 5_000_000

処理中のレスポンス・データのソフトリミット値(バイト単位)。

処理中のすべてのレスポンスのサイズの合計がこの値を超えている間、Scrapy は新しいリクエストを処理しません。

SPIDER_CONTRACTS

デフォルト:: {}

プロジェクトで有効にされたスパイダー規約(contract)を含む辞書。スパイダーのテストに使用されます。 詳細については、 スパイダー規約(contract) を参照してください。

SPIDER_CONTRACTS_BASE

デフォルト:

{
    'scrapy.contracts.default.UrlContract' : 1,
    'scrapy.contracts.default.ReturnsContract': 2,
    'scrapy.contracts.default.ScrapesContract': 3,
}

Scrapyでデフォルトで有効になっているScrapy規約を含む辞書。プロジェクトでこの設定を変更することは決してせず、代わりに SPIDER_CONTRACTS を変更してください。詳細については、 スパイダー規約(contract) を参照してください。

SPIDER_CONTRACTS でクラス・パスに None を割り当てることで、これらの規約を無効にできます。たとえば、組み込みの ScrapesContract を無効にするには、これを settings.py に配置します:

SPIDER_CONTRACTS = {
    'scrapy.contracts.default.ScrapesContract': None,
}

SPIDER_LOADER_CLASS

デフォルト: 'scrapy.spiderloader.SpiderLoader'

SpiderLoader API を実装する必要があるスパイダーのロードに使用されるクラス。

SPIDER_LOADER_WARN_ONLY

デフォルト: False

デフォルトでは、Scrapyが SPIDER_MODULES からスパイダー・クラスをインポートしようとすると、 ImportError 例外があると大声で怒られます。けれども、 SPIDER_LOADER_WARN_ONLY = True を設定することで、この例外を黙らせて単純な警告に変えることができます。

注釈

いくつかの scrapyコマンド は、実際にはスパイダー・クラスをロードする必要がないため、この設定を True に設定して実行します(つまり、警告のみを発行し、失敗しません): scrapy runspiderscrapy settingsscrapy startprojectscrapy version

SPIDER_MIDDLEWARES

デフォルト:: {}

プロジェクトで有効になっているスパイダー・ミドルウェアとその順序を含む辞書。 詳細については、 スパイダー・ミドルウェアをアクティブにする を参照してください。

SPIDER_MIDDLEWARES_BASE

デフォルト:

{
    'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
    'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
    'scrapy.spidermiddlewares.referer.RefererMiddleware': 700,
    'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800,
    'scrapy.spidermiddlewares.depth.DepthMiddleware': 900,
}

Scrapyでデフォルトで有効になっているスパイダー・ミドルウェアとその順序を含む辞書。 低次はエンジンに近く、高次はスパイダーに近い。 詳細については、 スパイダー・ミドルウェアをアクティブにする を参照してください。

SPIDER_MODULES

デフォルト: []

Scrapyがスパイダーを探すモジュールのリスト。

例:

SPIDER_MODULES = ['mybot.spiders_prod', 'mybot.spiders_dev']

STATS_CLASS

デフォルト: 'scrapy.statscollectors.MemoryStatsCollector'

統計収集器API を実装する必要がある統計情報の収集に使用するクラス。

STATS_DUMP

デフォルト: True

スパイダーが終了したら Scrapy stats を(Scrapyログに)ダンプします。

詳細は 統計をとる 参照。

STATSMAILER_RCPTS

デフォルト: [] (空リスト)

スパイダーがスクレイピングを完了した後、スクレイピーの統計を送信します。 詳細については、 StatsMailer を参照してください。

TELNETCONSOLE_ENABLED

デフォルト: True

telnetコンソール を有効にするかどうかを指定するブール値(当該拡張機能も有効になっている場合)。

TEMPLATES_DIR

デフォルト: Scrapyモジュール内の templates ディレクトリ

startproject コマンドで新しいプロジェクトを作成し、 genspider コマンドで新しいスパイダーを作成するときにテンプレートを探すディレクトリ。

プロジェクト名は、 project サブディレクトリ内のカスタム・ファイルまたはディレクトリの名前と競合してはいけません。

TWISTED_REACTOR

バージョン 2.0 で追加.

デフォルト: None

指定された reactor のインポート・パス。

scrapy CLI プログラムが呼び出されたときや CrawlerProcess クラスを使用するときなど、他のリアクターがまだインストールされていない場合、Scrapy はこのリアクターをインストールします。

CrawlerRunner クラスを使用している場合は、正しいリアクターを手動でインストールする必要もあります。 install_reactor() を使用してそれを行うことができます。

scrapy.utils.reactor.install_reactor(reactor_path, event_loop_path=None)[ソース]

指定されたインポート・パスで reactor をインストールします。 また、asyncio リアクターが有効な場合、指定されたインポート・パスで asyncio イベント・ループをインストールします。

リアクターがすでにインストールされている場合、 install_reactor() は効果がありません。

CrawlerRunner.__init__ は、インストールされているリアクタが TWISTED_REACTOR 設定と一致しない場合、 Exception を発生させます。 したがって、トップレベルの reactor をプロジェクトファイルにインポートし、サードパーティのライブラリをインポートすると、Scrapy は、どのリアクターがインストールされているかをチェックするときに Exception を発生させます。

Scrapyでインストールしたリアクターを使うには:

import scrapy
from twisted.internet import reactor


class QuotesSpider(scrapy.Spider):
    name = 'quotes'

    def __init__(self, *args, **kwargs):
        self.timeout = int(kwargs.pop('timeout', '60'))
        super(QuotesSpider, self).__init__(*args, **kwargs)

    def start_requests(self):
        reactor.callLater(self.timeout, self.stop)

        urls = ['http://quotes.toscrape.com/page/1']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {'text': quote.css('span.text::text').get()}

    def stop(self):
        self.crawler.engine.close_spider(self, 'timeout')

これは Exception を発生させ、以下のようになります:

import scrapy


class QuotesSpider(scrapy.Spider):
    name = 'quotes'

    def __init__(self, *args, **kwargs):
        self.timeout = int(kwargs.pop('timeout', '60'))
        super(QuotesSpider, self).__init__(*args, **kwargs)

    def start_requests(self):
        from twisted.internet import reactor
        reactor.callLater(self.timeout, self.stop)

        urls = ['http://quotes.toscrape.com/page/1']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {'text': quote.css('span.text::text').get()}

    def stop(self):
        self.crawler.engine.close_spider(self, 'timeout')

TWISTED_REACTOR 設定のデフォルト値は None です.これは, Scrapy が特定のリアクターをインストールしようとせず, 現在のプラットフォーム用に Twisted によって定義されたデフォルトのリアクターが使用されることを意味します。これは、下位互換性を維持し、デフォルト以外のリアクターを使用することで発生する可能性のある問題を回避するためです。

追加情報については、 Choosing a Reactor and GUI Toolkit Integration を参照してください。

URLLENGTH_LIMIT

デフォルト: 2083

スコープ: spidermiddlewares.urllength

クロールされたURLを許可する最大URL長。 この設定のデフォルト値の詳細については、 https://boutell.com/newfaq/misc/urllength.html を参照してください。

USER_AGENT

デフォルト: "Scrapy/VERSION (+https://scrapy.org)"

オーバーライドされない限り、クロール時に使用するデフォルトのUser-Agent。このユーザー・エージェントは、 ROBOTSTXT_USER_AGENT 設定が None であり、リクエストに指定されたUser-Agentヘッダーが指定されていない場合、 RobotsTxtMiddleware によっても使用されます。

他の場所で文書化された設定:

以下の設定は他の場所で文書化されています。それぞれの特定の場合をチェックして、それらを有効にして使用する方法を確認してください。