Pythonで取得したWebページのHTMLを解析するはじめの一歩

★気に入ったらシェアをお願いします!


perse

photo credit: K!T Screwed via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者かつWindowsユーザー向けにPythonでWebスクレイピングをする方法についてお伝えしています。

前回の記事はコチラ。

PythonでWebページを取得できたかどうかのエラーチェックと安全な中止の仕方
プログラミング初心者&Windowsユーザー向けにPythonでWebスクレイピングをする方法についてお伝えしています。PythonでHTTPリクエストする際のエラーのチェックと安全な中止の仕方についてです。

Webページを取得した際にエラーかどうかをチェックする方法についてお伝えしました。

これにて安全にWebページのHTMLを取得できるようになりましたので、いよいよ「解析」をして、欲しい情報だけを抽出していくという段取りに入ります。

ということで、今回はPythonでWebページのHTMLを解析するはじめの一歩についてお伝えします。

Beautiful Soupという変な名前のモジュールを使います。

では、行ってみましょう!

前回のおさらい

では、まずは前回のおさらいから。

作成したスクリプトはコチラでした。

  • requestsモジュールのget関数で取得したいWebページのResponseオブジェクトを取得
  • Responseオブジェクトが正常でなければ例外をスロー
  • ResponseオブジェクトからHTML文字列を取り出して表示

という流れです。

今回は、取り出したHTML文字列を解析して、titleタグの情報を取得・表示していきたいと思います。

Beautiful Soupモジュールをインストールする

PythonでHTML解析をするにはBeautiful Soupという変な名前のモジュールが便利です。

HTML文字列から、タグを条件にしたり、id属性を条件にしたりなど、いろいろな方法で要素を取り出すことができます。

では、そのBeautiful Soupという変な名前のモジュールをpipでインストールしましょう。

コマンドプロンプトを開いて、以下コマンド実行です。

すぐにインストールが完了します。

pipでBeautiful Soupモジュールをインストール

Successfully installed beautifulsoup4-4.6.0

これで準備は完了です。

pipについては以下記事もご覧ください。

初心者向けPythonでパッケージ管理をしてくれるツールpipのはじめての使い方
非エンジニアでWindowsユーザー向けにPythonを学んでいく方法をお伝えしています。今回はPythonのパッケージ管理をするツールpipの初心者向けの最初の使い方についてお伝えします。

PythonでHTML文字列を解析する

では、Beautiful SoupモジュールでHTMLを解析していきましょう。

Beautiful Soupモジュールをインポートする

まず、スクリプトの冒頭でBeautiful Soupモジュールのインポートが必要です。

インストール時には「beautifulsoup4」という名称でしたがが、インポートするときは「bs4」という名称を使いまして

import bs4

とします。

BeautifulSoupオブジェクトを生成する

Beautiful Soupモジュールを使ってHTMLを解析するためには、まずHTML文字列からBeautifulSoupオブジェクトを生成します。

書式は以下の通りです。

bs4.BeautifulSoup(HTML文字列, パーサー)

パーサーというのはパースをするやつ、つまり解析をするための機能のことで、ここで好みのパーサーを指定できます。

html5libやlxmlなど、いくつか種類がありますが、使用する場合は別のモジュールのインポートが必要になります。ひとまず、困ることが出てくるまでは、Pythonに標準で付属している「html.parser」を指定しておきます。

さて、こうしてHTML文字列からBeautifulSoupオブジェクトの状態になったら、解析がじゃんじゃんできるよということですね。

title要素を取得する

続いて、BeautifulSoupオブジェクトからtitle要素を取得してみたいと思います。

title要素は、名前の通り、そのページのタイトルをつかさどる要素です。SEOで言うととっても重要です。

BeautifulSoupオブジェクトから特定の要素を取得するには、以下のようにします。

BeautifulSoupオブジェクト.タグ名

title要素を取得したければ、タグ名を「title」とすれば良いということですね。

なんとシンプル!

では、これまでの一連の命令を使用して、以下スクリプトを作成しましたので実行してみましょう。

実行結果はコチラ。

PythonでWebページのタイトル要素を取得

バッチリです。

タグで最初の要素を取得する

ですが、一点注意です。

例えば、調子に乗って、h2タグを取得しようとします。

h2タグはいわゆる2番目に大きい「見出し」を表す要素です。で、この要素はページ内にたくさん存在する可能性があり、実際今回のページでも21個あるはずですが、以下スクリプトを実行しても

得られるのは以下のh2要素だけです。

つまり、「BeautifulSoupオブジェクト.タグ名」で取得できるのは、最初に登場した該当のタグだけです。

ページ内の複数のタグを取得するには別の方法を使う必要があります。

これについては次回の記事でお伝えしていきます。

まとめ

Pythonで取得したWebページのHTMLを解析する初めの一歩についてお伝えしました。

  • Beautiful Soupモジュールとそのインストール・インポート
  • BeautifulSoupオブジェクトの生成
  • BeautifulSoupオブジェクトから特定のタグの最初の要素を取得

などです。今回はtitle要素を取得しただけですが、おそらくこれから色々な解析をしていくことでしょう。

次回は、予告通り、ページ内で複数のタグ要素を取得する方法についてお伝えします。

PythonでWebページ内の特定のタグ要素をまとめて取得する
初心者向け&Windowsユーザー向けのPythonでWebページのスクレイピングをする方法をお伝えしております。今回は、PythonでWebページの特定のタグをまとめて取得する方法です。

どうぞお楽しみに!

連載目次:初心者向け!PythonでWebスクレイピングをしよう

スクレイピングとはWebサイトから情報を集めてくること。Pythonは専用の書籍が出るくらいスクレイピングが得意です。本シリーズでは、PythonでWebスクレイピングをする方法をお伝えしていきます。

  1. Pythonでスクレイピングをする最初の一歩、Webページを丸ごと取得する方法
  2. PythonでWebページを取得できたかどうかのエラーチェックと安全な中止の仕方
  3. Pythonで取得したWebページのHTMLを解析するはじめの一歩
  4. PythonでWebページ内の特定のタグ要素をまとめて取得する
  5. PythonでWebページから特定のclass属性を持つ要素をまとめて取得する方法
  6. PythonでWebページからid属性を条件にして要素を取得する方法
  7. PythonでWebページのHTML要素からテキストやリンクURLを取得する方法