ウェブスクレイピングガイド用Robots.txt

このガイドでは、robots.txtについて、ウェブスクレイピングにおいてなぜ重要なのか、そしてスクレイピングプロセスでどのように使用するかを学びます。
2 分読
Robots.txt for web scraping

このrobots.txtウェブスクレイピングガイドでは以下を解説します:

  • robots.txtとは?
  • ウェブスクレイピングにおいて重要な理由
  • サイトスクレイピング時にこれを無視した場合の結果
  • ウェブスクレイピングで知っておくべき一般的なディレクティブ
  • ウェブスクレイピングプロセスでの使用方法

robots.txtとは?

robots.txtは、Webロボットにサイトとのやり取り方法を指示する標準規格であるRobots Exclusion Protocol (REP)を実装するためのテキストファイルです。具体的には、robots.txtは、どのボットがサイトを訪問できるか、どのページやリソースにアクセスできるか、どの程度の頻度でアクセスできるかなどを指定します。これらのボットは通常、Google、Bing、DuckDuckGoなどの検索エンジンがWebをインデックスするために使用するWebクローラーです。

Googleの仕様によれば、各ドメイン(またはサブドメイン)はrobots.txtファイルを保持できます。これは任意であり、ドメインのルートディレクトリに配置する必要があります。つまり、サイトのベースURLがhttps://example.comの場合、robots.txtファイルはhttps://example.com/robots.txtで利用可能になります。

例えば、BrightDataのrobots.txtは以下のような内容です:

User-agent: *

Disallow: /lum/

Disallow: /www/*.html

Disallow: /use-cases/fintech

Disallow: /products/datasets2/

Disallow: /events/*

Disallow: /wp-stage/*

Disallow: /www/*

Disallow: /svc/*

Host: brightdata.com

サイトマップ: https://brightdata.com/sitemap_index.xml

ご覧の通り、これはウェブボット向けのルールと指示をまとめた単なるテキストファイルです。

User-agent や Disallow などのディレクティブは大文字小文字を区別しません。一方、値は大文字小文字を区別します。したがって、/lum/ と /Lum/ は同一ではありません。

ウェブスクレイピングにおいて重要な理由

robots.txtファイルが指示を与えるボットは、検索エンジンのクローリングロボットだけではありません。これには、ウェブスクレイパーを含む、サイトとやり取りするすべての自動化されたソフトウェアも含まれます。結局のところ、スクレイピングプログラムは自動化されたボットに他なりません。さらに、それらは通常、検索エンジンボットのようにウェブクローリングを実行します。詳細については、ウェブクローリングとウェブスクレイピングの比較ガイドをご覧ください

サイトをスクレイピングする際、対象サイトのrobots.txtファイルを尊重することが極めて重要です。これには以下の意味が含まれます:

  • 法的順守:ウェブスクレイパーはサイト所有者が定めたルールを遵守し、倫理的なウェブスクレイピングアプローチを取るべきです。
  • サーバー負荷の軽減:クローラーやスクレイパーはリソースを大量に消費するため、指示を尊重することでサイトの過負荷を防止できます。
  • ボット対策発動の回避:多くのサイトは流入トラフィックを監視し、宣言されたルールに準拠しない不正ボットをブロックします。

では、スクレイピングスクリプトがrobots.txtを尊重しない場合、何が起こるのでしょうか?次のセクションで明らかにしましょう!

サイトスクレイピング時にrobots.txtを無視した場合の結果

サイトはrobots.txtファイルの違反に対して非常に異なる反応を示します。何も起こらない場合もあれば、深刻な結果に直面する可能性もあります。一般的に、ウェブスクレイピングでrobots.txtを無視する際に考慮すべきシナリオは以下の通りです:

  • ブロックと操作の妨害:スクレイピング対策技術やボット対策技術により、IPアドレスが一時的または恒久的に禁止される可能性があります。これによりスクレイピングプロセスの効率が損なわれます。
  • 法的措置: 規約違反の場合、法的措置が取られる可能性があります。これは、ウェブスクレイピングスクリプトが残したフィンガープリントから身元が特定される場合に起こり得ます。ウェブスクレイピングプロキシでプライバシーを保護しましょう! 
  • 監視強化:ウェブセキュリティ専門家、ISP、サイバーセキュリティ組織がウェブスクレイピング活動を調査し始める可能性があります。

これらはほんの一例ですが、問題の重要性を理解するには十分です。robots.txtを順守するには、まずその指示の意味を理解する必要があります。さっそく掘り下げてみましょう!

ウェブスクレイピングで知っておくべき一般的なrobots.txtディレクティブ

REP仕様では、robots.txtファイルが指定できる指令はごくわずかです。しかし検索エンジンの仕様が進化するにつれ、他の可能性のあるルールも導入されました。これらは事実上の標準であり、同様に考慮する必要があります。

それでは、ウェブスクレイピングにおいて最も関連性の高いrobots.txtディレクティブを見ていきましょう。

User-agent

User-Agentは、サイトのクロールを許可するユーザーエージェントを指定します。ユーザーエージェントには、ウェブクローラー、スパイダー、スクレイパー、あらゆるボットが含まれます。通常、ウェブサイト管理者はこのディレクティブを使用して、特定の検索エンジンのクローラーを制限または指示します。

ディレクティブの構文は以下の通りです:

User-agent: <user_agent_name>

Disallow: [値]

<user_agent_name>が*の場合、あらゆるボットがサイトとのやり取りを許可されることを意味します。Disallow指示には相対パスを含め、サイトの特定部分へのアクセスを制限する必要があります。

一般的なユーザーエージェント文字列は以下の通りです:

検索エンジン ユーザーエージェント名
Baidu baiduspider
Bing bingbot
Google Googlebot
Yahoo! slurp
Yandex yandex

以下の例を考えてみましょう:

User-agent: *

Disallow: /private/

上記のrobots.txtファイルは、すべてのユーザーエージェントが/private/パス下のページにアクセスすることを禁止しています。したがって、/private/admin-login.phpはアクセス禁止となりますが、/private/platform/dashboard.phpも同様に禁止されます。これは、サブフォルダ内のファイルもDisallowルールによって影響を受けることを意味します。

同じ User-agent に対して複数の Disallow ルールが設定される場合があることに注意してください:

User-agent: *

Disallow: /private/

Disallow: /admin/

この場合、/private/ と /admin/ の両方のパスがアクセス禁止となります。

Disallowに値がない場合、すべてのページへのアクセスが許可されます:

User-agent: *

Disallow:

代わりに / の値が含まれている場合、すべてのページがアクセス禁止を意味します:

User-agent: *

Disallow: /

robots.txtの公式標準ではDisallowに対する正規表現やワイルドカードは言及されていませんが、主要な検索エンジンはそれらを想定しています。そのため、以下のような記述がよく見られます:

Disallow: /*.php

Disallow: /resources/*.pdf

これにより、/resources/ 配下の PDF ファイルや PHP ファイルへのボットアクセスが防止されます。

Disallowとは対照的に、非標準の指示であるAllowは許可される唯一のパスを指定します。次の例をご覧ください:

User-agent: *

Allow: /

これは以下に対応します:

User-agent: *

Disallow:

AllowはDisallowでブロックされた特定のルートを上書きできます:

User-agent: *

Disallow: /private/

Allow: /private/terms-and-conditions.php

このrobots.txtの例では、/private/配下の全ページがアクセス禁止となりますが、/private/terms-and-conditions.phpは例外です。

同じ robots.txt ファイルに複数の User-agent ディレクティブを記述し、異なるウェブロボットを指定できる点に留意してください:

User-agent: Googlebot

Disallow:

User-agent: bingbot

Disallow: /blog/

サイトマップ

サイトマップは非標準のディレクティブであり、ウェブサイトのXMLサイトマップの場所を含みます:

Sitemap: https://www.example.com/sitemap.xml

このルールは、サイトの構造に関する有用な情報を提供するXMLサイトマップの場所をボットに通知します。サイトマップに含まれるURLを辿ることで、サイト全体のスクレイピングが容易になります。当社のサイトマップスクレイパーをご覧ください

サイトマップファイルを指すURLは絶対パスで指定する必要があることに注意してください。

サイトが複数のサイトマップを持つ場合、robots.txtには複数のSitemapディレクティブを含めることができます:

Sitemap: https://www.example.com/sitemaps/page-sitemap.xml

Sitemap: https://www.example.com/sitemaps/post-sitemap.xml

Sitemap: https://www.example.com/sitemaps/author-sitemap.xml

Crawl-delay

非公式で普及していない Crawl-Delay ディレクティブは、ウェブクローラーがサイトへの連続したリクエストの間に待機すべき秒数を定義します:

User-agent: *

Crawl-delay: 5

これはユーザーエージェント固有のディレクティブであり、サーバーの過負荷を防ぐことを目的としています。この例では、すべてのユーザーエージェントがページ訪問の間に5秒間待機するよう指示されます。

リクエストレート

稀に用いられる非標準のUser-agent固有ディレクティブであるRequest-Rateは、指定時間内にユーザーエージェントがサイトへ送信できる最大リクエスト数を規定します:

User-agent: *

Request-rate: 1/10

例えば、このルールは全てのユーザーエージェントに対し、リクエストを10秒に1回に制限するよう指示します。

Request-rate の値は次の形式に従います:

<リクエスト数>/<秒数>

このディレクティブはCrawl-Delayと類似しており、どちらもサーバー過負荷の回避に役立ちます。主な違いは、Crawl-Delayが遅延を課すことでこれを達成するのに対し、Request-rateはレート制限を強制することで達成する点です。

ウェブスクレイピングプロセスにおけるrobots.txtの使用方法

robots.txtの定義と動作原理は理解できたでしょう。あとはウェブスクレイピングプロセスにこれを組み込む方法を確認するだけです。ウェブスクレイピングでrobots.txtファイルを尊重するには以下の手順が必要です:

  1. 対象サイトのrobots. txtファイルにアクセスする:
    • /robots.txtパスにHTTP GETリクエストを送信し、ファイルをダウンロードするかブラウザで開きます。
  2. 内容を確認する:
    • robots.txtファイルに含まれる指示を読み取ります。
    • 特定のURLやディレクトリへのアクセスを制限するDisallowルールがあるかどうかを確認する。
    • 禁止されたパス内の特定の領域へのアクセスを許可する可能性がある Allow ルールを探します。
    • 指定されている場合、Crawl-delay および Request-rate ディレクティブを確認する。
  3. スクレイピングスクリプトを作成します
    • robots.txtに設定されたルールに準拠するよう、スクレイパーを作成または修正してください。
    • ユーザーエージェントに対してアクセスが禁止されているURLへのアクセスは避けてください。
    • スクレイパーにスロットリング機構を実装し、Crawl-delay または Request-rate の制限を遵守してください。

ご覧の通り、スクレイパー構築前にはrobots.txtの指示を分析する必要があります。これによってのみ、前述の結果を回避できます。

さあ、これであなたはrobots.txtウェブスクレイピングのエキスパートです!

結論

本記事では、robots.txtの定義、サイトが使用する理由、スクレイパーのブロック回避に役立つ仕組みを解説しました。具体的には、オンラインデータ取得目標に影響するディレクティブを分析し、倫理的なスクレイピングプロセスの構築方法を学びました。

残念ながら、スクリプトがどれほどrobots.txtに準拠していても、反スクレイピング対策によってブロックされる可能性があります。これを回避するには?プロキシサーバーを活用しましょう。オンラインには複数のプロバイダーが存在し、全てを試すには数か月を要します。幸い、私たちはその問題を解決しました。

Bright Dataは最高品質のプロキシサーバーを管理し、20,000社以上の顧客とフォーチュン500企業にサービスを提供しています。その卓越した世界規模のプロキシネットワークには以下が含まれます:

全体として、これは市場で最大かつ最も信頼性の高いスクレイピング向けプロキシインフラの一つです。Bright Dataの製品群の中からお客様のニーズに最適なソリューションをご提案いたします。営業担当者までお問い合わせください。