本文へスキップ
BecomeCoder

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

HTMLを解析する ― BeautifulSoup の第一歩

ブラウザで完結

導入

ただの文字列である HTML を、タグの構造として扱えるようにするのが BeautifulSoup です。まずは「HTMLを読み込んで、最初の見出しを取り出す」ところから始めます。

説明

from bs4 import BeautifulSoup

html = """
<html>
  <body>
    <h1>今日のニュース</h1>
    <p class="lead">Pythonでスクレイピングを学ぼう</p>
  </body>
</html>
"""

# HTML文字列を解析して「スープ」を作る
soup = BeautifulSoup(html, "html.parser")

# 最初の <h1> を探す
h1 = soup.find("h1")
print(h1)         # <h1>今日のニュース</h1>(タグごと)
print(h1.text)    # 今日のニュース(中身の文字だけ)
  • from bs4 import BeautifulSoup … ライブラリの読み込み(初回は少し時間がかかります)。
  • BeautifulSoup(html, "html.parser") … HTML文字列を解析します。"html.parser" は Python 標準の解析エンジンの指定です。
  • soup.find("h1")最初に見つかった <h1> タグを返します。
  • .text … タグの中の文字だけを取り出します(<h1> などのタグを取り除いた中身)。

実サイトを相手にするときは、この html = """...""" の部分が「ネットから取得した HTML」に置き換わるだけで、解析のやり方はまったく同じです。

やってみよう

soup.find("h1")soup.find("p") に変えると、最初の <p> が取れます。.text を付けたときと付けないときで、出力が「中身だけ」か「タグごと」かが変わることを確かめましょう。

演習

上の HTML から <p class="lead">中身の文字Pythonでスクレイピングを学ぼう)を取り出して print してください。

ヒント1を見る

p = soup.find("p") として print(p.text)

実際に動かしてみよう

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

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

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