Webスクレイピング時のパッケージの使い分け 【requests vs. selenium】

Python

Python を使って自動操作をする際の、requests と selenium の使い分けについて整理しておきます。

環境:
・ Windows パソコン
・ Python 3.x、selenium をインストール済み

背景: requests と selenium のどちらを使うべきか

Python を使って Web スクレイピングや Web サイトの操作を行うとき、ネット検索をすると、requests を使っているものと、selenium を使っているものとが出てきます。

簡単に使えるとなると requests と BeautifulSoup かなとなりますし、やりたい処理が複雑になってくると selenium しかない、となりやすいです。
また、どちらも使える場合もありますし、requests と selenium を併用する場面も出てきます。

それぞれの特徴を考えずに使っていると、Python のプログラムがだんだん複雑化して、2つのパッケージや類似した処理が混在していくことになります。

そこで、やりたい内容に応じて、それぞれの特徴、相違点、ポイントについてまとめてみます。
大枠の方針を作っておけば、プログラムの複雑化を避け、流用性、処理の分離度などの点でも見通しがすっきりします。

使い分けのまとめ: requests vs. selenium

やりたいこと requests/Beautiful Soup selenium 典型例
サイトのテキストを取得したい ・ ブログ全文のテキストを取得したい
・ 天気予報、株価を取得したい
※ ただし、Webスクレイピングを許可しているサイトのみ使える
ページのリンク等を取得したい ・ URL の単純な取得
・ json ファイルを扱いたい
・ xml ファイルを扱いたい
簡単に使いたい ・ URL リストから単純にデータを取得したい
・ タグの処理に深入りしたくない
・ プログラムを簡素に書きたい
素早く処理したい ・ 数百件のテキストを単純に取得したい
※ ただし、サーバーの負荷に配慮する必要がある
高度な解析をしたい × ・ 検索サイトの結果を解析したい
・ 解析者ツールを活用したい
・ Xpath で操作箇所を指定したい
・ 画像を収集したい
・ mp3ファイルを収集したい
Webサイトを操作したい × ・ ボタン/リンクをクリックしたい
・ 文字列を入力したい
・ 動的な操作をしたい
・ サイトにログインしたい
サイトのスクリーンショットを撮りたい × ・ サイトの画面・デザインを保存したい
・ サイトのライブカメラの画像を取得したい
Webサイトのテストをしたい × ・ すべての画面遷移、ボタン操作、テキスト入力のテストをしたい
・ BeautifulSoup のコマンドに慣れる必要がある ・ 解析者ツールと selenium のコマンドに慣れる必要がある
・ ブラウザに対応したドライバを設定する必要がある(アップデートが頻繁)
・ 学習コストは selenium のほうが高そう

※ 厳密さは問わず記載しています。
プログラミング技術を駆使すれば例外的に使えるといったケースについては記載していません。
※ requests は BeautifulSoup とセットで使うことが多いと思われるため、まとめて記載しています。
selenium と BeautifulSoup の組み合わせで使うこともありますが、実態として、常にセットで使うということではなさそうですので、この記載としています。

まとめ

Webサイトの処理を自動化する際によく使う、requests と selenium について使い分けのポイントをまとめました。

ネット検索をすると、個々のパッケージについて書かれたサイトや書籍はありますが、上記のような比較表を見たことがなかったため、まとめてみました。
機能としては重複のあるパッケージですが、ポイントを明確化することで見通しをよくできると思います。

関連リンク
・ 指定したサイトマップからリンクを取得する 【Python】
・ 指定した URL からリンクを抽出する 【Python】
・ ウェブサイトのスクリーンショットを撮る 【Windows 版】
・ ウェブ検索と結果の取得を自動化する【Python】
・ Raspberry Pi でブラウザを自動操作してみる 【Python】
・ Webスクレイピングが動かなくなったとき 【Microsoft Edge & selenium】

タイトルとURLをコピーしました