Python を使って HTML 文書から HTML タグを取り除くには sgmllib モジュールを使います。sgmllib は SGML 形式のテキストファイルを解析する SGMLParser クラスが定義されています。SGML は HTML や XML のスーパーセットにあたるマークアップ言語なので、SGMLParser は SGML の派生言語である HTML や XML 文書を解析できるのです。
sgmllib を用いるメリットは Python の標準モジュールであるということです。独自の正規表現を用いて解析するよりも安心です。安全性を確かめたければ PYTHONPATH にある sgmllib.py を読めば良いのです。
インターネットで見つけたソースコードを以下に引用します。
import sgmllib
class Stripper(sgmllib.SGMLParser):
def __init__(self):
sgmllib.SGMLParser.__init__(self)
def strip(self, some_html):
self.theString = ""
self.feed(some_html)
self.close()
return self.theString
def handle_data(self, data):
self.theString += data
stripper = Stripper()
print stripper.strip("<tag>some boring <a>text</a> goes here</tag>")
SGMLParser はマークアップ要素の開始タグ、終了タグなどを処理するハンドラを定義して使います。つまり、タグが出現するイベントの処理を定義しないことでデータだけを取り出すのです。上記のソースコードでデータに対するハンドラが handle_data() メソッドです。開始タグのハンドラ handle_starttag()、終了タグのハンドラ handle_endtag() は定義されていません。handle_data() はタグで囲まれた部分をデータとして扱います。ですからタグに囲まれた部分だけを取得することで、実質的にタグを取り除くことができるのです。
HTMLParser を使っても同じ事ができます。