PHPではstrip_tagsという関数でString中のHTMLタグを簡単に除去できますが、Pythonでは標準の方法が用意されておらず自分で実装する必要があります。
ごりごり正規表現を書くのもあれなので、なにかいい方法がないか探してみました。
結果、調べてみた中ではこれが一番よさげ
http://stackoverflow.com/questions/753052/strip-html-from-strings-in-python
from HTMLParser import HTMLParser
class MLStripper(HTMLParser):
def __init__(self):
self.reset()
# stripしたテキストを保存するバッファー
self.fed = []
def handle_data(self, d):
# 任意のタグの中身のみを追加していく
self.fed.append(d)
def get_data(self):
# バッファーを連結して返す
return ''.join(self.fed)
def strip_tags(html):
s = MLStripper()
s.feed(html)
return s.get_data()
利点としては
- 標準ライブラリだけで済むこと
- 不完全なHTMLでもそこそこ動いてくれること
欠点としては
-
>
や&
といった実体参照まで消えてしまうこと
が挙げられます。
HTMLの一部でもちゃんと動いてくれますし、一般的な用途であればこの方法で十分ではないでしょうか。
パフォーマンス等については未検証です。