導入
実際のページには同じタグ(<div> や <span>)が大量にあります。目的のものだけを取るには、class や id を目印に絞り込みます。
説明
from bs4 import BeautifulSoup
html = """
<div class="product">
<span class="name">りんご</span>
<span class="price">120</span>
</div>
<div class="product">
<span class="name">みかん</span>
<span class="price">80</span>
</div>
"""
soup = BeautifulSoup(html, "html.parser")
# class="price" の span だけを全部取る
prices = soup.find_all("span", class_="price")
for p in prices:
print(p.text, "円")
find_all("span", class_="price")… タグ名に加えてclassで絞り込みます。- **
classではなくclass_(末尾にアンダースコア)**と書きます。classは Python の予約語なので、それを避けるための決まりです。 idで絞るときはsoup.find("div", id="main")のように書きます(idはページ内で1つの想定なのでfindが向いています)。
実行結果:
120 円
80 円
やってみよう
class_="price" を class_="name" に変えると、価格ではなく商品名(りんご・みかん)が取れます。「取りたい情報を囲んでいる目印の class は何か」を見極めるのが、絞り込みのコツです。
演習
上の HTML から、商品名(class="name")だけをすべて取り出して1行ずつ print してください。
ヒント1を見る
names = soup.find_all("span", class_="name") として、for n in names: print(n.text)。