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】