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

SGMLParser はマークアップ要素の開始タグ、終了タグなどを処理するハンドラを定義して使います。 つまり タグが出現するイベントの処理を定義しない ことでデータだけを取り出すのです。

上記のソースコードでデータに対するハンドラが handle_data() メソッドです。 開始タグのハンドラ handle_starttag() と終了タグのハンドラ handle_endtag() は定義されていません。 handle_data() にはタグで囲まれたデータが、引数 data として渡されます。 ですからタグに囲まれた部分だけを取得することで、実質的にタグを取り除くことができるのです。

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


最終更新日: 2015年05月16日(土)


Back to top