本文へスキップ
BecomeCoder

Pythonスクレイピングコース · 第2章 BeautifulSoupで解析する · レッスン7

属性の値を取り出す ― リンクURLなど

ブラウザで完結

導入

見出しや価格のような「中身の文字」だけでなく、リンク先URLhref)や画像URL(src)のような属性の値を取りたいこともよくあります。

説明

from bs4 import BeautifulSoup

html = """
<a href="/items/apple" class="link">りんごの詳細</a>
<a href="/items/orange" class="link">みかんの詳細</a>
"""

soup = BeautifulSoup(html, "html.parser")

for a in soup.find_all("a"):
    text = a.text            # リンクの表示文字
    url = a.get("href")      # href 属性の値
    print(text, "->", url)
  • a.text … タグの中身(表示される文字)。
  • a.get("href")href 属性の値を取り出します。a["href"] とも書けますが、属性が無いとき a["href"] はエラー、a.get("href")None を返すので、get の方が安全です。

実行結果:

りんごの詳細 -> /items/apple
みかんの詳細 -> /items/orange

取れる URL が /items/apple のように相対パスなことに注意しましょう。完全な URL にしたいときは、サイトのドメイン(https://example.com)を前に足します(第4章・第5章で扱います)。

やってみよう

a.get("href")a.get("class") に変えると、class 属性の値(['link'] のようにリスト)が取れます。get は「その属性の値」を返す万能の道具、と覚えましょう。

演習

上の2つのリンクについて、href の値だけを1行ずつ print してください(表示文字は不要)。

ヒント1を見る

for a in soup.find_all("a"): print(a.get("href"))

実際に動かしてみよう

下のエディタにPythonを書いて「実行」を押すと、本物の BeautifulSoup(Pyodide)でHTMLの解析をその場で試せます。初回だけ読み込みに少し時間がかかります。本文のHTMLを書き換えたり、抜き出すタグを変えたりして、結果の変化を確かめましょう(ネットからの取得は第5章の読み物で解説します)。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。