初心者でも簡単!PythonでWebスクレイピング(Beautiful Soup, Requests)

Pythonを使ったWebスクレイピングの入門編ということで、そもそもWebスクレイピングとは何か、どうやってプログラムを書けばいいのか、プログラムの骨格となる部分についてまとめていこうと思います。

環境:Windows10
2020年現在での情報をもとにしています。

プログラミング関連の記事一覧はコチラ

Webスクレイピングとは何か

WebスクレイピングとはWebからデータを抽出することをいいます。

例えば

  • メルカリに出品されている特定の商品の価格を知りたいとき
  • Web上のファイルを大量にダウンロードしたいとき
などです。

他にも使い方の具体例はいろいろありますが、基本的にはWeb上から必要なデータをとってくることに変わりありません。

また、WebサイトはHTMLという言語で書かれているので、その知識も必要になります。とくにタグ・要素・属性・属性値の違いは理解しておきましょう。

関連記事

HTMLの入門編と言うことで、HTMLを始めて勉強する初学者向けにHTMLで重要なタグと要素、属性、属性値の違いを解説していきましょう。 これらのタグ、要素、属性、属性値がHTMLの基本になります。これら4つの内容を理解したうえでプ[…]

HTMLのタグ・要素・属性・属性値の違い

Webスクレイピングを禁止しているサイトもあります。利用規約などを確認してから行うようにしてください。特にファイナンス系やSNS系は禁止になっているところがあります。ご注意ください

自動化禁止サイトまとめ!
【違法】スクレイピングはバレる?やっておくべき4つの対策!【法律と著作権的】

Webスクレイピングで使われるモジュール

  • wbbrowser
    • 指定したWebページを開くモジュール
  • Requests
    • インターネットからダウンロードするモジュール
  • Beautiful Soup
    • WebページのHTMLを読み込むモジュール
  • Selenium
    • マウス操作やフォームの入力などをするモジュール

今回紹介するのはBeautiful SoupとRequestsです。指定したページのHTMLを解析してHTMLタグの情報を分析できます。

Webスクレイピングの方法

モジュールのインストール

もし、インストールしていない場合はpipを使ってインストールしましょう。Beautiful Soupをインストールするときはbeautifulsoup4とします。4はバージョンのことです。

正常に読み込めていたら、下のソースコードのようにインポートしてもエラーは出ません。

Webサイトを読み込む

Webスクレイピングにおいて最初に記述するコードです。ほとんどの場合このコードがないとWebサイトを読み込むことができないのでテンプレのように扱っています。

  • 2行目:Beautiful Soupをインポートするときは「bs4」とします。
  • 5行目:’URL’に読み込みたいWebサイトのURLを書きます。
  • 6行目:raise_for_status()を書くと、Webサイトを読み込めなかった時にエラーを出してくれる。
  • 9行目:読み込んだHTMLをsite_soupに格納。
    • 「.content」と「’html.parser’」を忘れずに

Webスクレイピングのメソッド

要素を見つけるselect()メソッド

上のソースコードでは、9行目の部分からBeautiful Soupオブジェクトが作られています。そして、そのオブジェクトがsite_soup変数に格納されています。

このBeautiful Soupオブジェクトにたいして「select()メソッド」を使うことができます。

このメソッドは、読み込んだBeautiful Soupオブジェクトのなかでタグや属性・属性値を基準に指定した要素を取得する働きをします。

CSSのスタイルシートに似た書き方をしているものもありますね。これらを組み合わせることでより複雑な要素を取得することができます。

select()メソッドで取得した要素はリストに格納されています。より正確にいうとTagオブジェクトのリストになっています。オブジェクトがよくわからなくてもリストになっていることは覚えておきましょう。

テキストを取得するgetText()メソッド

getText()メソッドを使うと要素の内部テキストだけを取得できます。

要素の内部テキストとは開始タグと終了タグに挟まれた部分のことです。例えば以下のようなa要素があった場合、その内部テキストとは「とことん独学ブログ」の部分になります。

getText()メソッドは以下のように書きます。

  • 2行目:site_soupからa要素すべてをselect()メソッドで取得
  • 5行目:リストの1つ目をspam変数に格納
    • この行は無くてもOK → 11行目へ
  • 8行目:spamからgetText()メソッドでテキストを取得

select()メソッドで取得した値がリストになっているので、インデックスを指定する必要があります。どんなデータ型になっているかがわからないとエラーになってしまうので、必ず確認しておきましょう。

属性値を取得するget()メソッド

get()メソッドは開始タグ内に書かれている属性を指定して、その属性値を取得することができます。

10行目でget()メソッドに’href’を指定してます。すると、8行目のa要素からhrefの属性値であるURLを取得してくれます。

今回は確認のためにprint関数で出力結果を表示させています。

まとめ

今回はWebスクレイピング入門編ということで、HTMLを解析する方法から、メソッドを使って必要なデータを取得する方法を紹介しました。

最初は複雑に感じるかもしれませんが、オブジェクトとデータ型を理解しながら進めることが一番の近道ですね。

もし、オブジェクトやデータ型がいまいちわからない場合は、これを機会に勉強してみましょう! より理解が深まりますよ。

当ブログではPython初心者が独学で習得するためのカリキュラムを公開中!

初心者がPythonを独学で習得できたロードマップはコチラ

Pythonに関する記事一覧はコチラ

PythonでWebスクレイピングする方法
最新情報をチェックしよう!