導入
見出しや価格のような「中身の文字」だけでなく、リンク先URL(href)や画像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"))。