Python
 Computer >> コンピューター >  >> プログラミング >> Python

urllib.robotparser徹底解説 ― Pythonでrobots.txtを解析するRobotFileParserクラスの使い方

ウェブサイトの所有者は、/robots.txt ファイルを使って、サイトにアクセスしてくるウェブロボットに対して指示を出します。これは「Robots Exclusion Protocol(ロボット排除プロトコル)」と呼ばれる仕組みです。

このファイルは、ウェブリソースへ自動的にアクセスするプログラム(スパイダー、クローラーなど)向けの、シンプルなテキストベースのアクセス制御システムです。ファイル内にはユーザーエージェントの識別子が記述され、その後に続けて、そのエージェントがアクセスしてはならないURLのリストが指定されます。

robots.txtの記述例

#robots.txt
Sitemap: https://example.com/sitemap.xml
User-agent: *
Disallow: /admin/
Disallow: /downloads/
Disallow: /media/
Disallow: /static/

このファイルは通常、Webサーバーのトップレベルディレクトリ(ドキュメントルート)に配置されます。

Python標準ライブラリの urllib.robotparser モジュールは、RobotFileParser クラスを提供しています。このクラスを使うと、「robots.txt を公開しているサイト上の特定のURLを、指定したユーザーエージェントが取得できるかどうか」という問い合わせに答えることができます。

RobotFileParser クラスには、以下のメソッドが定義されています。

set_url(url)

robots.txt ファイルを参照するURLを設定します。

read()

設定されたURLから robots.txt を読み込み、その内容をパーサーに渡します。

parse(lines)

引数として渡された行(robots.txt の内容)を解析します。ファイルを直接読み込む代わりに、既に取得済みの行データを解析したい場合に使用します。

can_fetch(useragent, url)

robots.txt に含まれるルールに従って、指定したユーザーエージェントがそのURLを取得できる場合は True を、取得できない場合は False を返します。

mtime()

robots.txt ファイルが最後に取得された時刻を返します。

modified()

robots.txt が最後に取得された時刻を設定します。クローラー側でキャッシュ管理を行う際などに利用されます。

crawl_delay(useragent)

対象のユーザーエージェントに対する Crawl-delay パラメータの値を返します。パラメータが存在しない場合は None を返します。

request_rate(useragent)

Request-rate パラメータの内容を、RequestRate(requests, seconds) という名前付きタプルとして返します。

基本的な使用例

from urllib import parse
from urllib import robotparser

AGENT_NAME = 'PyMOTW'
URL_BASE = 'https://example.com/'

parser = robotparser.RobotFileParser()
parser.set_url(parse.urljoin(URL_BASE, 'robots.txt'))
parser.read()

続いて、can_fetch() を使えば、特定のURLへのアクセスが許可されているかを簡単に判定できます。

# アクセス可否の判定
print(parser.can_fetch(AGENT_NAME, URL_BASE + 'downloads/file.zip'))  # False
print(parser.can_fetch(AGENT_NAME, URL_BASE + 'index.html'))          # True

このように urllib.robotparser を活用することで、クローラーやスクレイピングツールを開発する際に、対象サイトの robots.txt の規約を遵守したマナーの良いプログラムを実装できます。

  1. Windowsで使えるPython開発用IDEおすすめ7選|PyCharmからAtomまで徹底解説

    Windows環境でPythonの開発を始めるとき、最初に悩むのが「どのIDE(統合開発環境)を選ぶべきか」という問題です。IDEはコードの編集・実行・デバッグなどをひとつのアプリケーションで完結できる強力なツールであり、選択次第で開発効率が大きく変わります。 本記事では、Windowsで利用できる代表的なPython対応IDEを厳選し、それぞれの特徴やメリットをわかりやすく解説します。 PyCharm PyCharmはJetBrains社が開発する、Python開発で最も人気のあるIDEのひとつです。無料のコミュニティ版と有料のプロフェッショナル版が用意されており、初心者からプロフェッショ

  2. Pythonコードを高速化する11の最適化テクニック

    Pythonはコンパイル言語ほど高速ではないことは周知の事実ですが、大手企業がPythonで大規模なワークロードを処理している事例からも分かるように、決して「遅い言語」ではありません。この記事では、正しく動作するPythonプログラムをさらに速く、効率的にするために押さえておきたい最適化のヒントを11個紹介します。 ヒント1: 組み込み関数を活用する Pythonで独自に効率的なコードを書くことも可能ですが、C言語で実装された組み込み関数の速度には到底及びません。利用可能な組み込み関数はdir(__builtins__)で一覧表示できるので、車輪の再発明をする前に必ず確認しましょう。 ヒン