Python|文字列からHTMLタグを除去する方法

1. はじめに

WebスクレイピングやHTMLメール処理などで得られるテキストデータには、しばしば不要なHTMLタグが含まれています。こうしたタグを取り除いて、プレーンなテキストのみを抽出したい場面は多くあります。

本記事では、Pythonで文字列からHTMLタグを除去する方法について、基本的な方法から実務で使える応用例まで丁寧に解説します。初心者でも理解できるよう、コードにはコメントをつけて、実行結果も明示しています。

 

2. PythonでHTMLタグを削除する基本方法

2-1. 正規表現(reモジュール)を使う

最も基本的な方法は、Python標準ライブラリのre(正規表現)モジュールを使う方法です。以下はそのサンプルコードです。

import re

html = '<p>こんにちは、<strong>Python</strong>学習者の皆さん!</p>'

# 正規表現でHTMLタグを除去
text = re.sub(r'<.*?>', '', html)

print(text)

実行結果:

こんにちは、Python学習者の皆さん!

2-2. BeautifulSoupで確実に除去

reモジュールは簡易的ですが、HTML構造が複雑な場合は除去ミスが起こる可能性があります。そこで、HTML解析に特化したライブラリ BeautifulSoup を使う方法が推奨されます。

from bs4 import BeautifulSoup

html = '<div><p>Pythonで<a href="#">Webスクレイピング</a>をしよう!</p></div>'

# BeautifulSoupでパースして、タグを除去
soup = BeautifulSoup(html, 'html.parser')
text = soup.get_text()

print(text)

実行結果:

PythonでWebスクレイピングをしよう!

 

3. よくある使い方・応用例

3-1. Webスクレイピングの結果を整形

HTMLから不要なタグを除いて、記事本文だけを取得したい場面は多くあります。以下はその例です。

import requests
from bs4 import BeautifulSoup

url = 'https://example.com/sample.html'
response = requests.get(url)

# HTML全体をBeautifulSoupで処理
soup = BeautifulSoup(response.text, 'html.parser')

# 特定の要素(記事本文)を取得
article = soup.find('div', class_='content')
text = article.get_text()

print(text)

実行結果:

(例)これは記事本文です。HTMLタグは除去されました。

3-2. 複数のHTML文字列から一括でタグ除去

リスト形式で取得したHTMLテキストに一括処理するケースもあります。

html_list = [
    '<p>こんにちは</p>',
    '<div><span>Pythonは楽しい</span></div>',
    '<a href="#">リンク</a>'
]

# BeautifulSoupを使って一括で除去
from bs4 import BeautifulSoup

clean_texts = [BeautifulSoup(html, 'html.parser').get_text() for html in html_list]

for text in clean_texts:
    print(text)

実行結果:

こんにちは
Pythonは楽しい
リンク

 

4. 注意点・エラー対策

4-1. 正規表現は簡易的だが非推奨のケースも

正規表現は単純なタグ除去には便利ですが、以下のようなケースではうまく機能しません。

  • ネストされたタグ
  • 属性付きのタグ
  • コメントやスクリプトタグの混在

対応策:
→ HTML構文解析が必要な場合は、必ずBeautifulSoupを使うのが安全です。

4-2. BeautifulSoupでのエンコーディングエラー

Webページによっては、文字化けや文字コードの違いで以下のようなエラーが起こることがあります。

UnicodeEncodeError: 'charmap' codec can't encode character ...

対応策:

  • response.encoding = response.apparent_encoding を明示的に指定
  • ファイル保存時に encoding='utf-8' を指定

 

5. まとめ|PythonでのHTMLタグ除去の学び

この記事では、PythonでHTMLタグを除去する方法として、以下の2通りの手段を紹介しました。

  • reモジュールによる正規表現処理
  • BeautifulSoupを使ったHTML構文解析

特に、実務で信頼性が求められる場面ではBeautifulSoupの利用が鉄則です。Webスクレイピング、メール解析、データ前処理など、プレーンテキストが必要な場面で活躍します。

💡 学習のコツ: 最初は正規表現で簡単な処理から始め、慣れてきたらBeautifulSoupにステップアップしましょう。

ご自身のデータ処理にぜひ役立ててください!

タイトルとURLをコピーしました