導入
ただの文字列である 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)。