[Python #5] requestsとseleniumの使い分け(初心者向け)
こんにちは、Pythonチーム所属のT.Sです!
今回は、PythonでWebスクレイピングを行う際に、よく使われるライブラリであるrequestsとseleniumの違いについてお話ししたいと思います。
requestsとは
requestsとはhtmlを取得するためのサードパーティライブラリであり、HTTP通信する為のライブラリです。
requests単体でスクレイピングを行う事は出来ず、BeautifulsoupなどのHTML解析ライブラリと併用する事でスクレイピングできるようになります。
具体的には、requestsでクローリングして取得したHTMLデータをBeautifulsoupなどのHTML解析ライブラリで解析し、解析したデータから欲しいデータを抽出する流れになります。
requestsの性質を理解出来れば、事前に、これからスクレイピングを行うサイトがrequestsで対応可能か不可能かがわかるようになります。
私は普段、スクレイピングを行う前に手動で目的のデータまでの流れを確認したり、検証ツールでHTMLとCSS以外から出力される要素が存在するかを確認する事でrequestsで対応できるか判断しています。 ※検証ツールとは、Webページ上の構造(HTMLやCSS)を確認する事が出来るツールです。Chromeだと、マウスの右クリックで出てくる「検証」、MicrosoftEdgeだと、マウスの右クリックで出てくる「開発者ツールで調査する」から検証ツールを利用できます。
seleniumとは
seleniumとは、ブラウザの自動化を可能にするオートメーションツールのことです。
seleniumを使用する事で、ブラウザ上の様々な操作をプログラムにより自動化できます。
基本的にブラウザ上で手動で出来る事はseleniumで自動化出来ます。 例1:ログイン操作の自動化 例2:スクロール操作の自動化 例3:クリック操作の自動化
上記のブラウザ操作の自動化により、Webサイトから柔軟にデータを取得する事ができます。
requestsとseleniumの違い
この2つのライブラリには、作られた目的に大きな違いがあります。
requestsは、HTTP通信をした情報抽出をメインとしていますが、seleniumはブラウザ操作の自動化に特化したツールであり、そのくくりの中にデータの自動収集がある感じです。
Requests: HTTP for Humans™ — Requests 2.28.0 documentation
Seleniumブラウザー自動化プロジェクト | Selenium
また、requestsはHTML解析ライブラリと併用しないと情報抽出できないですが、seleniumはHTML解析ライブラリと併用しなくても情報抽出できる点に違いがあります。
requestsとseleniumの使い分け
requestsとseleniun、双方の違いを理解し必要に応じて使い分ける事でスクレイピングの幅が広がり、取得効率も上がります。
requestsとseleniumの使い分け方としては、単純な構造のサイトから大量のデータを取得してくる場合はrequestsを使い、requestsで対応できない複雑な構造のサイトはseleniumで対応するのが一般的だと思います。
ここでいう「単純な構造のサイト」と「複雑な構造のサイト」というのはそれぞれ、
「単純な構造のサイト」は、目的のデータを取得するのに、ログインやスクロールなどのブラウザ操作を必要としない、かつ、HTMLとCSSのみから作成されたサイトのことを指しており、
「複雑な構造のサイト」は、ブラウザ操作をしないと目的のデータに辿り着けないサイト、または、javascriptなどで出力されるHTMLデータがあるサイトのことを指しています。
最後に
ざっくりとした説明でしたが、requestsとseleniumについてご理解頂けたでしょうか。
この2つのライブラリに関してはこのように文章で説明されるより、実際に手を動かしてスクレイピングした方が理解は早いと思います。
弊社のPythonチームでは、Webスクレイピングの課題に取り組む機会が与えられています。課題は、requestsとseleniumを使い分けられないと合格できない内容であり、必然的にスクレイピングが身につく環境になっています。
また、pythonチームのナレッジでは、他の方がスクレイピングで書いたコードも公開してます。
Webスクレイピングについて興味がある方は弊社のインターンで一緒に学びましょう!