PythonでWebスクレイピングする方法をライブラリ別に解説

Pythonを使ったWebスクレイピングに取り組みたいものの、

・コードの書き方が分からない…。
・スクレイピングに役立つライブラリが知りたい…。

という方も多いのではないでしょうか。そこでこの記事では、

・Pythonのライブラリを使用したWebスクレイピングの方法
・PythonでWebスクレイピングを行う際の注意点

について、サンプルコードを交えながら解説します。

Webスクレイピングが初めての方でも、この記事を読めばPythonでデータやタイトル、見出しなどを取得する方法がわかります。

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

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

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

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

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

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

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

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

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

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

 

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

Udemyで講座を探す >

Webスクレイピングを行う際の注意点

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

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

Webサイトの利用規約・著作権を事前に確認する

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

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

robots.txtの指示を守っているのか確認する

robots.txtの指示を守っているかどうかも、Webスクレイピングを行う際に注意するべきポイントです。

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

アクセスの間隔を空けて負荷を抑える

Webスクレイピングの目的でサーバーにアクセスをする時は、最低1秒以上間隔をあけて、Webサーバーに負荷をかけないようにしてください。

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

スクレイピングに使うプログラムに連絡先を明記する

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

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

 

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

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

ライブラリによって、出来ることや特徴が異なります。

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

以下では、それぞれのライブラリについて詳しく解説します。

 

データを取得するためのスクレイピング【Requests】

Requestsは、Webサイトからデータを取得する機能を持ったライブラリです。ここでは、Webスクレイピングを行うために、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()を利用して特定の情報を見ることができます。例えば、ヘッダー情報を取得したい時は

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

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

 

タイトルや見出しを取得するためのスクレイピング【BeautifulSoup】

BeautifulSoupは、取得したHTMLデータを解析できるライブラリです。BeautifulSoup自体には、サーバーと情報をやり取りする機能はありません。そのため、まずはRequestsでHTMLデータを取得した上で、BeautifulSoupを使ってページのタイトルや見出しなどの情報を抽出します。

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

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ページの情報

 

Javaで作られたコンテンツを取得するためのスクレイピング【Selenium】

Seleniumとは、Webアプリケーションのテストを自動化するための複数の機能が備わったフレームワークです。その中の1つである「Selenium WebDriver」を使うと、プログラミング言語を通じてブラウザを自動的に操作できます。

また、SeleniumではJavaScriptで動的に生成されるコンテンツも扱うことが可能です。そのため、静的なHTMLだけでなく、動的なWebページをスクレイピングしたい場合に適しています。

Seleniumを用いたWebスクレイピングを行いたい方は、「Selenium WebDriverとは?インストール方法から使い方まで解説」を参考にしてください。

 

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

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

RequestsとBeautifulSoupのライブラリを使用することで、簡単な記述でWebページから情報を取得し、データを解析・抽出することができます。また、Javaなどで作られた動的なページをスクレイピングしたい場合は、Seleniumが便利です。

PythonによるWebスクレイピングさらに詳しく学びたい方には以下の講座がおすすめです。

Udemyおすすめ講座

PythonによるWebスクレイピング〜入門編〜【業務効率化への第一歩】

PythonによるWebスクレイピング〜入門編〜【業務効率化への第一歩】

3.8(3,738 件の評価)

22,364 人の受験生

作成者: 今西 航平(プログラミング教育)

Seleniumを用いて、自動ログイン、テキストの抽出、画像データの収集を行ってみよう。データの収集方法を学ぶことで、定期的なデータ収集を効率良く行うことができます。

\無料でプレビューをチェック!/

講座を見てみる

評価:★★★★★
コメント:まさに自分が求めていた講座だった。これまでネット上のスクレイピングコードを参考に見様見真似でスクレイピングもどきを試してきたが、対象サイトのURL構造変化の度に参考にするコードを探して対策してきたが、いたちごこになっており時間ばかりを浪費してきた。今回この講座を受けることでseleniumの基礎を学ぶことができ、自分でコードをくみ上げることができるのではないかと感じるようになった。講師の進行はやや丁寧すぎる印象もあったが、理解のためには役立ったと思う。お勧めできる講座だと思う。

評価:★★★★★
コメント:みんなと同じで最初の環境構築はめちゃめちゃ辛くて挫折しそうでした。そこを超えたらスムーズでした。コスパはとても高いと思います。ありがとうございました。

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