導入
価格表やランキングなど、データはよく <table> に入っています。テーブルは「行(<tr>)の中にセル(<td>)が並ぶ」構造なので、二重ループで読み取ります。
説明
from bs4 import BeautifulSoup
html = """
<table>
<tr><th>名前</th><th>点数</th></tr>
<tr><td>田中</td><td>80</td></tr>
<tr><td>鈴木</td><td>92</td></tr>
</table>
"""
soup = BeautifulSoup(html, "html.parser")
for row in soup.find_all("tr"):
cells = row.find_all("td") # データ行のセル
if not cells:
continue # 見出し行(th)はスキップ
name = cells[0].text
score = cells[1].text
print(f"{name} さんは {score} 点")
- 外側の
find_all("tr")で行を1つずつ取り出します。 - 各行で
find_all("td")してセルを取り、cells[0]・cells[1]で列を指定します。 - 見出し行は
<td>を持たない(<th>のみ)ので、if not cells: continueで飛ばしています。
実行結果:
田中 さんは 80 点
鈴木 さんは 92 点
やってみよう
cells[0] と cells[1] を入れ替えると、表示される列が入れ替わります。「行でループ → 列を添字で指定」がテーブル読み取りの基本形です。
演習
上の表から、点数(2列目)だけを1行ずつ print してください。
ヒント1を見る
セルを取ったあと print(cells[1].text)。見出し行のスキップ(if not cells: continue)も忘れずに。