Day 51:HTML基礎 ― Webデータを「構造」として見る目を育てる
Day 51では、PythonでWebデータを扱うための土台として、 HTML・タグ・属性・DOM をコンパクトに押さえていきます。
「Webページをきれいに表示する技術」というよりも、 「データの構造を表す記法」 としてHTMLを見るのが今日のテーマです。
HTMLとは:Webページの「骨組み」を表す言語
見た目ではなく「構造」を決める役割
HTMLは、Webページの 骨組み(構造) を表現するための言語です。
- ここがタイトル
- ここが本文
- ここがリンク
- ここが画像
といった「意味のある区切り」を、タグを使って表現していきます。
PythonでWebスクレイピングやWebデータ取得をするときは、 この「骨組み」を理解しておくことで、
「欲しいデータがページのどこにあるか」
を機械的に見つけられるようになります。
タグとは:HTMLの「部品」を表す記号
開始タグと終了タグで囲む
HTMLの基本単位は タグ です。
代表的なタグをいくつか見てみましょう。
<h1>これは見出しです</h1>
<p>これは段落(本文)です。</p>
<a href="https://example.com">これはリンクです</a>
タグは、基本的に次の形をしています。
- 開始タグ:
<タグ名> - 終了タグ:
</タグ名> - 中身(コンテンツ):テキストや他のタグ
例えば <p>...</p> は「段落」を表すタグで、 その中に本文テキストが入ります。
よく使うタグのイメージ
h1〜h6:見出し(数字が小さいほど大きな見出し)p:段落(本文)a:リンク(アンカー)img:画像(自己完結タグで終了タグがないことが多い)div:区切り(ブロック要素)span:小さな区切り(インライン要素)
PythonでHTMLを解析するときは、
「このページのタイトルは
h1にある」 「商品名はspanの特定クラスにある」
といったルールを見つけていくことになります。
属性とは:タグに「追加情報」を付けるもの
hrefやclassなどの「ラベル」
タグには、属性 を付けることができます。
<a href="https://example.com" target="_blank">リンク</a>
<img src="image.png" alt="サンプル画像">
<p class="lead">これはリード文です。</p>
属性は、次のような役割を持ちます。
href:リンク先のURLsrc:画像ファイルのパスalt:画像の代替テキストclass:CSSやJavaScriptで扱うための「ラベル」id:ページ内で一意な識別子
PythonでHTMLを解析するときは、この属性がとても重要です。
「classが
product-nameのタグを探す」 「idがmain-contentの要素を取得する」
といった形で、欲しい要素をピンポイントで指定できるようになります。
DOMとは:HTMLを「木構造」として見る考え方
親子関係でページ全体を捉える
DOM(Document Object Model)は、 HTMLを 木構造(ツリー) として表現する考え方です。
ざっくり言うと、
- ページ全体:
html - その中に
headとbody bodyの中にdivやh1やpなど- それぞれの中にさらにタグやテキストが入っていく
という「入れ子構造」になっています。
簡単な例を見てみましょう。
<!DOCTYPE html>
<html>
<head>
<title>サンプルページ</title>
</head>
<body>
<h1>ページタイトル</h1>
<p class="lead">これはリード文です。</p>
<div id="content">
<p>本文の1行目です。</p>
<p>本文の2行目です。</p>
</div>
</body>
</html>
これをDOMとして見ると、
htmlheadtitle
bodyh1p(class=”lead”)div(id=”content”)pp
という「木構造」になります。
PythonでHTMLを扱うライブラリ(BeautifulSoupなど)は、 このDOM構造をたどりながら、
「特定のタグ・属性を持つ要素を探す」 「親要素・子要素をたどる」
といった操作を行います。
PythonでHTMLをちょっとだけ触ってみる
ここでは、HTMLそのものの深掘りではなく、 「PythonからHTMLをどう見るか」の入り口だけ触れておきます。
例:HTML文字列をそのまま扱う
まずは、Pythonの文字列としてHTMLを持っておきます。
# day51_html_basic.py
html = """
<!DOCTYPE html>
<html>
<head>
<title>サンプルページ</title>
</head>
<body>
<h1>ページタイトル</h1>
<p class="lead">これはリード文です。</p>
<div id="content">
<p>本文の1行目です。</p>
<p>本文の2行目です。</p>
</div>
</body>
</html>
"""
print(html)
Pythonこの段階では、まだ「ただの文字列」です。 次のステップで、この文字列を「DOMとして扱う」方向に進んでいきます。
DOMを意識した「読み方」の練習
HTMLを解析するライブラリを使う前に、 目でDOM構造を追う練習をしておくと、後が楽になります。
練習:このHTMLから「リード文」と「本文」を見つける
先ほどのHTMLをもう一度見てみます。
<h1>ページタイトル</h1>
<p class="lead">これはリード文です。</p>
<div id="content">
<p>本文の1行目です。</p>
<p>本文の2行目です。</p>
</div>
ここから、
- リード文 →
pタグでclass="lead"の要素 - 本文 →
divタグでid="content"の中にあるpタグたち
というルールが見えてきます。
Pythonでスクレイピングするときは、 こうした「タグ+属性+DOM構造」の組み合わせで、
「どこに何があるか」
を機械的に指定していくことになります。
Day 51ミニテンプレート:HTML構造をコメント付きで眺める
最後に、HTMLの構造を意識しやすいように、 コメント付きのサンプルを載せておきます。
<!DOCTYPE html>
<html>
<head>
<!-- head はページの設定やタイトルなどを入れる場所です -->
<title>サンプルページ</title>
</head>
<body>
<!-- body が実際に画面に表示される部分です -->
<!-- h1 は一番大きな見出しです -->
<h1>ページタイトル</h1>
<!-- class="lead" は「リード文」というラベルのイメージです -->
<p class="lead">これはリード文です。</p>
<!-- id="content" は、このブロックを一意に識別するためのラベルです -->
<div id="content">
<!-- ここから本文の段落が続きます -->
<p>本文の1行目です。</p>
<p>本文の2行目です。</p>
</div>
</body>
</html>
このように、
- タグ:
h1,p,divなど - 属性:
class,idなど - DOM構造:親子関係・入れ子構造
を意識して眺めるだけでも、 「Webページを構造として見る目」が少しずつ育っていきます。
Day 51のまとめ
Day 51では、Web・API編の中でHTML基礎を押さえる回として、
- HTMLは「Webページの骨組み(構造)」を表す言語であること
- タグは、見出し・段落・リンク・画像などの「部品」を表す記号であること
- 属性は、タグに追加情報(href, src, class, idなど)を付けるための仕組みであること
- DOMは、HTMLを木構造として捉え、親子関係をたどりながら要素を扱う考え方であること
- PythonでWebデータを扱うときは、「タグ+属性+DOM構造」で欲しい情報を特定していくこと
を、コンパクトに整理しました。
