PythonでWebスクレイピングをする方法を解説!【入門編】

PythonでWebスクレイピングをする方法を解説!【入門編】

Pythonの基礎が理解できてくると、Pythonを使用して実用的に役立つ処理を実行してみたくなるのではないでしょうか。

そこで今回は、Pythonの利用用途として人気である「Webスクレイピング」について解説していきます。スクレイピングの概要からサンプルコードの解説までお伝えしますので、この記事を読んだ後すぐにスクレイピングができるようになりますよ。

PythonでできるWebスクレイピングとは?

Webスクレイピングとは、WebサイトからWebページのHTMLデータを取得し、見出しや写真といった特定のデータを抽出するコンピューターソフトウェア技術のことです。Webスクレイピングによって得られた情報は、不要な部分の削除といった加工が自動的に行われます。そのため、人の手でデータを収集する際にかかる時間を大幅に削減できます。

このWebスクレイピングを行うプログラムのことを「スクレイパ」と言います。なお、Webスクレイピングの作業を始める前に、対象のサイトを「クローリング」する必要があります。クローリングとは、WebサイトからHTMLなどの情報を取得する技術で、クローリングを行うプログラムのことを「クローラー」といいます。

Webスクレイピングは、「スクレイパ」と「クローラー」のによって構成されています。

スクレイピングの基本的な流れ

Webスクレイピングを行う時の基本的な手順は以下の通りです。

1.クローリングをして対象のWebページの内部情報を取得する

2.取得したWebページを解析し、スクレイピングをして特定のデータを検索・抽出する

3.スクレイピングして抽出したデータを整形し保存(もしくは表示する)

上記の一連の作業を行うために、Webスクレイピングのライブラリフレームワークを使用することが多いです。

スクレイピングは禁止されているサイトも!注意点はある?

スクレイピングで特定のデータを抽出する際、自分の管理元にないWebサイトの情報を抽出すると、違法行為になる可能性があります。

違法行為をしてしまうことを未然に防ぐために、注意点がいくつかあります。以下の点に留意して、行いましょう。

  • スクレイピングを行うWebサイトの利用規約、著作権を事前に確認しましょう。

Webサイトの中にはページ内の情報の抜き出しを禁止しているものもあります。そのため、抽出した情報を使用する時、著作権法に違反していないか確認しましょう。

  • robots.txtの指示を守っているのかも、事前に確認してください。

robots.txtは検索エンジンのクローラー(ロボット)からWebページへのアクセスを制限するためのファイルです。robots.txtにはアクセスしても良いページ、してはいけないページなどの記述があるので、該当のページのスクレイピングが許可されているか確認しましょう。

  • サーバーアクセスをする時は最低1秒以上間隔をあけて、Webサーバーに負荷をかけないようにしてください。

Webサーバーに負荷がかかると、他の閲覧者がサイトを見られなくなったりサーバーが落ちてしまったりします。トラブルの原因とならないよう、Webサーバーへの負荷は極力避けましょう。

  • クローリングをするためのプログラム、クローラーを開発する時は連絡先を明示しておくのがおすすめです。

明示しておくことで、問題が起きた時サーバー管理者とスムーズに連絡を取ることができます。連絡先は、クローラーのUser-agentヘッダーにURLやメールアドレスを書きましょう。

 

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

PythonでWebスクレイピングする際に利用できるライブラリ

PythonにはWebスクレイピングに適したライブラリが複数用意されています。よく利用されるライブラリ、「Requests」、「Beautiful Soup」、「Selenium」について解説していきます。

3つのライブラリはそれぞれ出来る事と特徴が違います。

ライブラリ Webページ取得 データ抽出 特徴
Requests × Webページを取得する。 シンプルで人が直感的に分かりやすいプログラムを記述できる。
Beautiful Soup × 取得したWebページの情報(HTML)をパースする。
Selenium Webページ取得と、データ抽出の両方が利用できる。 JavaScriptが使用されたサイトやログインにも使用できる。 動作が遅いのがデメリット。

 

Pythonでのスクレイピング入門【Requests編】

Pythonでのスクレイピング入門として、JavaScriptが使用されていないサイトから情報を取得するためにRequestsとBeautiful Soupを使用して、ページの情報を表示していきます。
まず、Requestsを利用してHTMLを取得する処理を、ソースコードもまじえて解説していきます。

ライブラリを利用するには、まずインストールが必要です。
Python3系バージョンのRequestsをインストールする時は、以下のコマンドを実行しましょう。

Requestsのメソッドを解説

ライブラリの機能を実行するために、メソッドを利用します。

Requestsで主に利用するメソッドについて解説します。

メソッド 処理内容
get() サーバーから情報を取得する
post() サーバーへ情報を登録する
put() サーバーの情報を更新する
delete() サーバーの情報を削除する

 

それぞれのメソッドの使い方を詳しく見ていきましょう。

get()

記述方法は

です。

引数のURLは必須で、<オプション>には任意で値を設定します。

引数 説明
URL 読み込み対象のURL

 

続いて、<オプション>で利用される引数をいくつか紹介します。

引数 処理内容
headers 辞書を設定することで、ヘッダーとして送信する内容を書き換える
timeout リクエストのタイムアウトを指定する
files バイナリータイプのデータを送信する

 

・post()

記述方法は

です。

URLに対して、送信データを送ることができます。

送信データにはファイルを指定したり、JSONと呼ばれる形式で記述されたデータ列を指定したりすることができます。

・put()

記述方法は

です。

postと同様にリクエストできます。

・delete()

記述方法は

です。
postと同様にリクエストし、指定のデータを削除できます。

Webページのデータを取得しよう

それでは実際に、Webページのデータを取得してみましょう。

上記を実行すると、response変数に、指定したURLのWebページ情報が取得できます。

Webページ情報が取得できたら、print()を利用して特定の情報を見ることができます。例えば、ヘッダー情報を取得したい時は

を、ボディ内の情報を取得したいなら

を実行することで、情報を見ることができます。

 

Pythonでのスクレイピング入門【BeautifulSoup編】

BeautifulSoupはサーバーと情報をやり取りする機能がないため、はじめにRequestsでHTMLデータを取得します。取得した情報を解析するのが、BeautifulSoupの役割です。例えば、RequestsでHTMLのデータを取得し、BeautifulSoupでページのタイトルや見出しなどの情報を摘出することができます。

Python3系バージョンのBeufiulSoupをインストールする時は、以下のコマンドを実行しましょう。

BeautifulSoupのメソッドを解説

BeautifulSoupでHTML要素を取得するには、「find系」(find(), find_all())と「select系」(select_one(), select())のメソッドを使用します。

find系も、select系もHTMLの内容を検索し、条件に合う要素を返すという事は同じですが、条件の指定方法が異なります。

find系は、引数にHTMLの属性と属性値を指定します。一方、select系はCSSセレクタと呼ばれる、「何をどの値にするか」を設定した要素(セレクタ)を指定します。どちらを使うかは好みで良いでしょう。

また、メソッドに_allや_oneが付くことで、全ての要素を返すのか、1つだけの要素を返すのかが異なります。

処理速度を気にする場合は、全ての要素だと遅くなるため、1つだけの要素を返すメソッドを使うのがおすすめです。

これらを表で整理すると下記のようになります。

タイプ 全ての要素をリストで返す 1つの要素だけ返す 検索条件
find系 find_all() find() 属性、属性値
select系 select() select_one CSSセレクタ

 

WebページのタイトルやURLを取得しよう

それでは実際に、RequestsでWebページを取得し、BeautifulSoupでタイトルやURLを取得してみましょう。
先に、ソースコードと実行結果です。

上記コードを実行すると、

のように出力されます。
ソースコードについて解説していきます。

ここで、BeautifulSoupを使用するためにモジュールを読み込みます。

Requestsを使用し、「https://example.com」のWebページの情報を取得します。

その後、BeautifulSoupの関数を呼び出し、Webページのコンテンツの内容を分析しています。

第2引数で設定されている “html.parser” は分析を行う時に使用するパーサー(解析器)を指定しています。html.parserはPythonの標準ライブラリに入っており、ライブラリの追加が不要です。

この時点で、soupには、Webページのコンテンツの全てが入っています。

で、selectメソッドを使用し、条件に合うデータを出力しています。今回は、Webページの、 「<h1>」と「<p>」 を指定しています。

Chromeブラウザであれば、「F12」を押下することで、下記のようにWebページの情報を参照できますので、取得したいデータ情報を簡単に得ることができます。(左側がWebページで、右側がWebページのHTML構造)

Webページの情報

 

PythonでできるWebスクレイピングを活用し、情報解析に役立てよう

今回の記事では、Pythonを使ってWebスクレイピングする方法を紹介しました。

RequestsとBeautifulSoupのライブラリを使用することで、簡単な記述でWebページから情報を取得し、データを解析・抽出することができます。

Webスクレイピングのやり方を習得することで、自動化したり、面倒な手間を省いたりするツールを作成することも可能ですので、是非使ってみてください。