Python で HTML タグを取り除く方法

Python を使って HTML 文書から HTML タグを取り除くには sgmllib モジュールを使います。sgmllib は SGML 形式のテキストファイルを解析する SGMLParser クラスが定義されています。SGML は HTML や XML のスーパーセットにあたるマークアップ言語なので、SGMLParser は SGML の派生言語である HTML や XML 文書を解析できるのです。

sgmllib を用いるメリットは Python の標準モジュールであるということです。独自の正規表現を用いて解析するよりも安心です。安全性を確かめたければ PYTHONPATH にある sgmllib.py を読めば良いのです。

HTML タグを除去するクラス

インターネットで見つけたソースコードを以下に引用します。

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>")
HTML Stripper

SGMLParser はマークアップ要素の開始タグ、終了タグなどを処理するハンドラを定義して使います。つまり、タグが出現するイベントの処理を定義しないことでデータだけを取り出すのです。上記のソースコードでデータに対するハンドラが handle_data() メソッドです。開始タグのハンドラ handle_starttag()、終了タグのハンドラ handle_endtag() は定義されていません。handle_data() はタグで囲まれた部分をデータとして扱います。ですからタグに囲まれた部分だけを取得することで、実質的にタグを取り除くことができるのです。

HTMLParser を使っても同じ事ができます。



$Date: 2009-04-15 23:51:04 +0900 (Wed, 15 Apr 2009) $