本記事(記事カラム)には広告が含まれています。

HTMLファイルに含まれているtilteタグの中身を表示|Python 練習 17

PythonPython練習
記事内に広告が含まれています。

tkinter でHTMLファイルを選択し、そのファイルに含まれている<tilte>タグの中身を表示します。

DMM FX広告(差し込みタイプ)
広告(PR)|自分の投資スタイルを見つける。※タップで開閉
広告(PR)

DMM FXは、「最初の一歩を踏み出す場」として選ばれることがある

口座を開いてみた。取引してみた。思ったよりも難しかった。──そんな経験が、投資との距離感を知るきっかけになることもあります。


サービスを通じて、自分の投資スタイルを見つける。それは、確信ではなくても構いません。「試してみた」という実感が、次の選択の材料になることもあるからです。


DMM FXに関する詳細は、以下の広告(PR)リンクをご覧いただけます。


👇こちらは広告(PR)リンクバナーです

DMMFX

AI新時代の検証環境へ
広告(PR)|AI新時代の検証環境へ ※タップで開閉

実際に書いたコード

【試してみる際のお願い】

  • プログラミングは、お使いのパソコンの環境(OSやアプリのバージョン)によって、同じコードでもエラーが出るケースがよくあります。
  • 外部での実行や利用を想定して作られていないため、万が一、動作を試されたことにより不具合等の損害が生じても、当方は一切の責任を負いかねます。
  • 自分用のメモにつき、質問やバグ修正などの個別サポートは一切行っておりません。試す場合は完全な自己責任でお願いいたします。
import tkinter as tk
from tkinter import filedialog
from bs4 import BeautifulSoup


def extract_title(path):
    with open(path, "r", encoding="utf-8", errors="ignore") as f:
        html = f.read()

    soup = BeautifulSoup(html, "html.parser")
    title_tag = soup.find("title")

    if title_tag:
        return title_tag.text.strip()
    else:
        return "タイトルタグが見つかりませんでした"


def select_file():
    path = filedialog.askopenfilename(
        filetypes=[("HTML Files", "*.html *.htm"), ("All Files", "*.*")]
    )
    if not path:
        return

    title = extract_title(path)
    title_label.config(text=f"{title}")


root = tk.Tk()
root.title("HTMLファイルの <title>タグの中身を表示")
root.geometry("600x200")


text_label_0 = tk.Label(
    root, text="<title>タグの中身を表示します。", font=("Meiryo", 12)
)

text_label_0.pack(pady=15)

btn = tk.Button(root, text="ファイルを選ぶ", command=select_file, font=("Meiryo", 12))
btn.pack(pady=20)


title_label = tk.Label(root, text="", font=("Meiryo", 12))
title_label.pack()

root.mainloop()

解説

ローカル HTML ファイルから <title>タグの内容のみを抽出して表示します。

Tkinter ベースの簡易 GUI ツール。 HTML パースには BeautifulSoup を使用。

依存ライブラリ

  • tkinter(標準)
  • bs4(BeautifulSoup) pip install beautifulsoup4

ファイル構成

単一ファイルで構成。 GUI(Tkinter)と HTML 抽出ロジック(BeautifulSoup)を分離した最小構成。

主な関数

extract_title(path)

HTML ファイルを読み込み、BeautifulSoup で <title> タグを抽出して返します。

select_file()

ファイル選択ダイアログを開き、選択された HTML の <title> を抽出して GUI に反映。

GUI 構成

フォント指定の理由

font=("Meiryo", 12)
  • Windows で日本語を確実に表示する
  • Tkinter のデフォルトフォントは日本語が潰れることがある
  • Meiryo は OS 標準で可読性が高い

pady を付けている理由

text_label_0.pack(pady=15)
  • Tkinter の pack() はデフォルトで 上詰め配置
  • そのままだと UI が上に張り付き、視認性が悪い
  • pady で上下の余白を確保し、最低限のレイアウト調整を行うため

注意点

  • BeautifulSoup が未インストールの場合、GUI 起動前に import エラーで停止する
  • <title> が存在しない HTML ではメッセージを返す仕様
  • レイアウトは pack() のみで構成

補足:soup はインスタンスを参照している変数です

このコードで作成している soup は、BeautifulSoup クラスから生成されたインスタンス(実体オブジェクト)です。 Pythonでは変数はすべて「オブジェクトへの参照」を保持する仕組みになっているため、 厳密には “BeautifulSoup インスタンスを参照している変数” という表現が最も正確です。

しかし実務では、参照変数という言い方はあまり使われず、 soup をそのまま 「BeautifulSoup のインスタンス」 と呼んでも問題ありません。

クラス(class)とは

クラスは 設計図 です。 どんな機能を持つか、どんなメソッドを使えるか、といった情報だけが書かれています。

インスタンス(instance)とは

インスタンスは、設計図から作られた“具体的なモノ”です。

  • HTML の内容という「状態」を内部に保持し
  • .find().get_text() といった「メソッド」を使える

つまり、実際に操作できる“使えるオブジェクト”がインスタンスです。

実行結果

Auto Py to Exe で、Windowsのexeアプリ化して、実行。

テスト用のHTMLファイル

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <title>これはテスト用のタイトルです</title>
</head>

<body>
    <h1>HTML タイトル抽出テスト</h1>
    <p>このファイルは Python の BeautifulSoup と Tkinter の動作確認用です。</p>
</body>

</html>

HR


人気ブログランキング