Webスクレイピングや Webサイトの自動操作をするときに出てくる、requests と selenium の使い分けについて整理しておきます。
環境: Windows パソコン、Python 3.x をインストール済み
背景: requests と selenium のどちらを使うべきか
Web スクレイピングや Web サイトの操作を行うとき、requests を使うケースと、selenium を使うケースが出てきます。
簡単に使えるとなると requests と BeautifulSoup かなとなりますし、やりたい処理が複雑になってくると selenium しかない、となりやすいです。
また、どちらも使える場合もありますし、requests と selenium を併用する場面も出てきます。
それぞれの特徴を考えず使っていると、プログラムがだんだん複雑化して、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】
・ Webスクレイピングが動かなくなったとき 【Microsoft Edge & selenium】
・ ウェブ検索と結果の取得を自動化する【Python】
・ Raspberry Pi でブラウザを自動操作してみる 【Python】