Webスクレイピングを実施する中で、利用するべきライブラリの選定が必要になります。
また、サイトごとに使い分けの必要性があり、どれを使うべきか悩むケースも少なくありません。
本記事では、サイトの特徴に合わせてスクレイピングに利用するライブラリの使い分けを解説します。
- Webスクレイピングとは
- 静的ページと動的ページの違い
- Webスクレイピングのやり方・手順
- スクレイピングに利用するライブラリの比較
- 特定サイトのクローリング&スクレピング
- SIer/Web系企業での実務経験があるフリーランスエンジニア
- プログラミングスクールでの講師実績あり
- HR領域によるエンジニア特化の採用代行を業務委託で兼務
Webスクレイピングとは
Webスクレイピングとは、主にサイトからデータを収集する技術を指します。
そのため、サイト内の情報が収集可能かどうかによって、業務効率化できるか左右されます。
Webスクレイピングで何ができる?
Webスクレイピング自体は、データ収集する技術です。
ただ、Webスクレイピングだけでも様々な活用方法があります。
主に画像(動画含む)データ、テキストデータ、数値データを取り扱うことになります。
昨今、機械学習システムやAIに活用するため、学習データとしてスクレイピングを多用します。
また、業界問わずオンラインMTGやインサイドセールス活動が求められる案件がクラウドソーシングサイトで数多く募集されています。
そのため、スクレイピングを利用して営業リスト作成が求められるため、十分利用できる技術の一つになります。
データ収集時の考え方
Webスクレイピングによるデータ収集時に考えるべきことがあります。
一般的に、スクレイピングによって収集したデータを出力するだけではよくありません。
そのため、スクレイピング時に以下のプロセスを考えておくべきです。
スクレイピング時の準備プロセス
API・クローラー/Webスクレイピング等で収集・リクエストし、データを収集します。
HTML構造データを変換し、BeautifulSoupやSelenium等のライブラリで解析します。
解析から対象になるデータを特定要素(classやxpathなど)から抽出します。
抽出したデータからノイズ(ゴミ)を取り除き、正規化・画像処理などを実施します。
抽出・加工・整形したデータを保存し、目的に沿ったCSVやExcelファイルに出力します。
上記のプロセスをスクレイピング時に取り入れることで、すぐに利用できるデータの状態を作り出すことができます。
静的ページと動的ページの違い
静的ページは、Webサーバーで用意されたHTMLファイルを読み込み、ブラウザ側で表示されます。
一方で、動的ページはリクエストの度にHTMLファイルを再生成します。
そのため、Webスクレイピングの観点から動的ページより静的ページが処理しやすいです。
なぜなら、リクエストに応じて変化する動的ページは、スクレイピング処理だけでなく、ブラウザ操作もプログラムする必要があるためです。
Webスクレイピングが可能なサイトなどを詳しく知りたい人は、「Webスクレイピング可能なサイトの見分け方とOK・禁止なサイト」といった記事を一読ください。
requestsとSeleniumの違い
requestsとSeleniumの違いは、ブラウザ操作・制御の有無になります。
requestsは、Seleniumと違ってブラウザ操作を実施しないため、URLをもとにサイト情報を取得します。
また、サイト情報をHTMLあるいはXMLなどのデータで取得するため、取得後はBeautifulSoupといった解析用ライブラリを利用する必要があります。
Webスクレイピングのやり方・手順
上記で静的ページと動的ページの違いを解説しましたが、スクレイピング処理の際もやり方・手順が異なります。
以下のページ分類にて、解説します。
- 静的ページをスクレイピングするやり方・手順
- 動的ページをスクレイピングするやり方・手順
静的ページをスクレイピングするやり方・手順
requestsモジュールにて、Webページへのアクセスを実施しHTMLファイルをダウンロードします。
HTMLファイルの解析では、BeautifulSoupモジュールを利用します。
最終的な出力ファイルは、csvモジュールなどを利用します。
これらをフレームワークとして利用できるScrapyでもスクレイピング可能です。
動的ページをスクレイピングするやり方・手順
動的ページは、静的ページと違ってURLによるページ遷移ができないため、Seleniumによる画面操作が必要になります。
SeleniumでWebページアクセスと画面操作の処理を実行し、データ要素をスクレイピングする工程まで一括します。
こちらも出力ファイルは、csvモジュールなどを利用します。
requestsのメソッドの使い方
requestsでは、以下の4つが代表的なメソッドになります。
メソッド名 | 説明 |
---|---|
requests.get() | サーバーから情報を取得 |
requests.post() | サーバーへ情報を送信 |
requests.put() | サーバーの情報を更新 |
requests.delete() | サーバーの情報を削除 |
本記事では、Webスクレイピングで多用される.get()メソッドを重点的に解説します。
requests.get()の引数の使い方
Webスクレイピングといったデータ収集などで頻繁に利用されるのがrequests.get()になります。
res = requests.get(URL, 任意の引数)
.get()メソッドを利用することで直感的に操作することができます。
また、以下が主な引数になります。
メソッド名 | 必須/任意 | 説明 |
---|---|---|
URL | 必須 | 対象URL |
headers | 任意 | リクエスト時にヘッダーデータを辞書で指定 |
params | 任意 | リクエスト時にURLのクエリパラメータを辞書で指定 |
cookies | 任意 | リクエスト時にクッキーを辞書で指定 |
timeout | 任意 | リクエスト時のタイムアウトを指定 |
スクレイピング業務では、引数にURLのみを利用することが多いです。
requests.get()によるresponseオブジェクトの確認
リクエスト後の戻り値(応答)として、responseオブジェクトが返ってきます。
以下がresponseオブジェクトの属性値になります。
属性 | 説明 |
---|---|
status_code | ステータスコード |
headers | レスポンスヘッダーのデータ |
content | レスポンスのバイナリデータ |
text | レスポンスのテキストデータ |
encoding | エンコーディング(変換方式:utf-8など) |
cookies | クッキーデータ |
基本的にWebスクレイピングでは、responseオブジェクトのtext属性データのみを利用することが多いです。
requestsライブラリをさらに理解したい人は、「【Python】requestsとは?インストールから使い方まで徹底解説!」を一読ください。
BeautifulSoupの代表的なメソッドの使い方
HTMLデータを解析した後、指定した箇所のデータを抽出する必要があります。
本記事では、スクレイピングの際に利用するBeautifulSoupの代表的なメソッドを記載します。
タイプ | 1要素だけ返す | 全要素をリストで返す | 引数(検索条件指定) |
---|---|---|---|
find系 | find() | find_all() | 要素名, 属性指定(キーワード引数) |
select系 | select_one() | select() | CSSセレクタ |
機能はどちらも同じですが、引数の違いによって探し出すアプローチ方法が異なります。
ただし、HTMLデータによってはクラス/idに対して属性値を持たないデータがあるため、その場合はselect系を利用しましょう。
BeautifulSoupをさらに理解したい人は、「【Python】 BeautifulSoup4とは?インストールから使い方まで徹底解説!」を一読ください。
Seleniumのメソッドの使い方
代表的なSeleniumのメソッドは以下の4つです。
メソッド名 | 説明 |
---|---|
.get() | 対象URLを指定しアクセス/データ取得するメソッド |
.find_element_by_〇〇(“”) | Selenium3にて利用されるfind系メソッド |
.find_element(By.〇〇, “xx”) | Selenium4にて利用されるfind系メソッド |
.send_keys() | 対象にデータ送信するメソッド |
.click() | 対象をEnterするメソッド |
Seleniumにおける各メソッドの使い方を詳細に知りたい人は、「【Python】 Seleniumとは?インストールから使い方まで徹底解説!」を一読ください。
スクレイピングに利用するライブラリの比較
スクレイピングで利用するライブラリは、主に4つになります。
ライブラリ | HTML ダウンロード | コード抽出/解析 | データ保存 | ページ分類 | 処理速度 |
---|---|---|---|---|---|
requests | 静的 | ||||
BeautifulSoup | 静的 | ||||
Selenium | 静的, 動的 | ||||
Scrapy | 静的 |
比較表から、静的ページのスクレイピングを実施する場合、requests + BeautifulSouupモジュールの組み合わせを利用するのがおすすめです。
静的ページのスクレイピング例を知りたい人は、「【Python】ページ遷移型のクローリング&スクレイピング方法」を一読ください。
また、動的ページのスクレイピングを実施する場合、Seleniumモジュールを利用するのがおすすめです。
動的ページのスクレイピング例を知りたい人は、「【Python】SeleniumによるGoogleマップのスクレイピング」を一読ください。
コメント