Blanktar

  1. top
  2. blog
  3. 2013
  4. 05

pythonでhtmlの文字参照をなんとかする。

htmlの文字参照ってやつ。めんどいよね。 面倒さのあまりlt、gt、nbsp、あとampあたりだけreplace掛けて良しとしちゃってたりしたんだけどさ。 標準ライブラリのリファレンス見てたら、htmlentitydefsなんて使えそうなものがある。

という訳で使ってみた。 あんま短いコードにならなかった。 がっかり。

import htmlentitydefs    # python3.xならhtml.entities
import re

def unescape(string):
    for x in re.findall('&[a-zA-Z]+?;', string):
        try:
            rep = htmlentitydefs.name2codepoint[x[1:-1]]
        except KeyError:
            pass
        else:
            rep = unichr(rep)    # python3.xなら普通にchr(rep)でおっけー。
            string = string.replace(x, rep)
    return string


print unescape('test string')
print unescape('<tag in <tag>>')
print unescape('dummy&tag;')

もっと短く書く方法あったら教えてくらはい。

あ、そうそう。 nbspの結果がなんか不思議なことになるので注意。 ノーブレークスペースってやつで、普通のスペースとは違うみたいね。詳しくはwikipediaでもどうぞ。 これになっちゃうと困る場合は、個別にreplaceでもしてください。

string = string.replace(' ', ' ')

みたいな感じで済むから、まあそんな労力にはならんでしょ。