本文へスキップ
BecomeCoder

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

class で絞り込む ― find の条件指定

ブラウザで完結

導入

実際のページには同じタグ(<div><span>)が大量にあります。目的のものだけを取るには、classid を目印に絞り込みます

説明

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)

実際に動かしてみよう

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

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

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