PythonでWebページ内の特定のタグ要素をまとめて取得する


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

初心者向け&Windowsユーザー向けのPythonでWebページのスクレイピングをする方法をお伝えしております。

前回の記事はコチラです。

Pythonで取得したWebページのHTMLを解析するはじめの一歩
初心者かつWindowsユーザー向けにPythonでWebスクレイピングをする方法についてお伝えしています。今回はPythonでWebページのHTMLを解析するはじめの一歩、Beautiful Soupモジュールの使い方です。

Beautiful Soupモジュールを使って取得したWebページを解析する準備完了というところまでお伝えしています。

さて、いよいよ本格的にHTMLの解析をしていく必要があります。

解析…といってもどう進めていいものやら…というところもあるかも知れませんので、Chromeブラウザのデベロッパーツールを使いながら、その方法をお伝えしてきましょう。

まずは、PythonでWebページの特定のタグをまとめて取得する方法です。

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

スポンサーリンク

前回のおさらい

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

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

import requests, bs4
res = requests.get('https://tonari-it.com')
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, "html.parser")
print(soup.title)
  1. 当ブログのトップページについてrequestsモジュールのget関数で取得してきて
  2. そのレスポンスが正常かどうかチェック(正常でない場合は例外をスロー)
  3. そのHTML文字列からBeautifulSoupオブジェクトを生成
  4. titleタグの最初の要素を抽出して表示

と、こんなスクリプトです。

簡単なHTML解析として

BeautifulSoupオブジェクト.タグ名

とすることで、特定のタグ要素を取得できるのですが、取得できるのは最初に登場した一つの要素だけです。

title要素など、おそらくWebページごとに1つであろうタグの要素なら良いのですが、一般的には同じタグが複数存在しているので、その場合は使えません。

今回は、その点を解消していきます。

Chromeのデベロッパーツールについて

と、その前に、本来Webスクレイピングをする際には、欲しい情報がどんなタグに含まれているのかとか、どんな属性を持っているのかとか、つまりどんな条件で要素を取り出せば良いのかを知る必要があります。

その手段として、Google Chromeのデベロッパーツールを使わない手はありません。

欲しい情報を構成するHTML要素を確認する

解析したいWebページを開いて、ショートカットキー Ctrl + Shift + I または F12 キーを押下すると、デベロッパツールが起動します。

下図の「Select an element in the page to inspect it」のアイコンをクリックするか、ショートカットキー Ctrl + Shift + C でWebページ上に青い枠が出てくるようになります。

この状態で欲しい情報があるエリアをクリックすると、右側にのHTMLコードがワーって書いてあるところも連動して、そのエリアを示す箇所にフォーカスが当たります。

Chromeのデベロッパーツールで要素のHTMLを調べる

この機能を使えば、欲しいWebページの情報が、どんなHTMLで構成されているのかということがわかるのです。

欲しいHTML要素のouterHTMLをコピーする

それで、当ブログのトップページで言うと、記事一覧になっているのですが、その記事タイトルがh2タグで構成されているということです。

例えば、一つ例として記事タイトルのHTMLを取り出してみましょう。

この場合も、デベロッパーツールが便利です。

右側の欲しいHTML要素を選択した状態で、右クリック。表示されたメニューから「Copy」→「Copy outerHTML」とたどります。

ChromeのデベロッパーツールでouterHTMLを取得

これで、outerHTMLつまり「タグも含めた外側のHTML文字列」がクリップボードにコピーされましたので、ペーストしてみましょう。

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

特定のタグの要素を取得する

ということで、今回のお題「ブログのトップページの記事一覧から記事タイトルを含むタグを取得したい」ということで進めていきますね。

BeautifulSoupオブジェクトのselectメソッド

Pythonでその目的を達成するためには、BeautifulSoupオブジェクトのselectメソッドを使う方法があります。

書き方はこちらです。

BeautifulSoupオブジェクト.select(セレクタ)

セレクタで指定した条件にマッチした要素を全て取得し、Tagオブジェクトのリストとして取得するのです。

Tagオブジェクトというのは、Beautiful Soupモジュールにおける、HTML要素を表現するオブジェクトです。

なお、セレクタというのは、CSSセレクタでのことで、いろいろな条件指定をすることができます。

例えば、h2タグを取得したければ

BeautifulSoupオブジェクト.select(‘h2’)

とします。他の使い方に関しては追ってお伝えしていきます。

ページ内の特定の要素を全て表示するスクリプト

では、これを使用して、ブログのトップページからh2要素を全て表示してみましょう。

スクリプトはコチラです。

import requests, bs4
res = requests.get('https://tonari-it.com')
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, "html.parser")
elems = soup.select('h2')
for elem in elems:
    print(elem)

selectメソッドでは、Tagオブジェクトのリストが取得できますので、リストに対してfor文を回して全ての要素について表示をしています。

出力結果はコチラ。

Pythonで取得したh2タグのTagオブジェクト

ぶわーっと出てきちゃいましたが、うまくいっているようです。

まとめ

PythonでWebページ内の特定のタグ要素をまとめて取得する方法についてお伝えしました。

けっこう、半分以上Chromeのデベロッパーツールの話になってしまいましたが、スクレイピングをする上で有用ですので、ぜひ覚えておいていただければと思います。

次回は、class属性を条件にして、より色々な情報を取得できるようにしていきたいと思います。

PythonでWebページから特定のclass属性を持つ要素をまとめて取得する方法
初心者かつ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を取得する方法

タイトルとURLをコピーしました