1. ホーム
  2. パイソン

[解決済み】Pythonで文字列からHTMLを取り除く

2022-03-26 17:52:43

質問

from mechanize import Browser
br = Browser()
br.open('http://somewebpage')
html = br.response().readlines()
for line in html:
  print line

HTMLファイルの行を印刷するとき、フォーマットそのものではなく、各HTML要素の内容のみを表示する方法を探しています。もしそれが '<a href="whatever.com">some text</a>' の場合、'some text' とだけ表示されます。 '<b>hello</b>' は'hello'を表示する、など。どうすればいいのでしょうか?

どのように解決するのですか?

Python stdlibだけで使えるので、HTMLタグのストリップにはいつもこの関数を使っています。

Python 3 の場合。

from io import StringIO
from html.parser import HTMLParser

class MLStripper(HTMLParser):
    def __init__(self):
        super().__init__()
        self.reset()
        self.strict = False
        self.convert_charrefs= True
        self.text = StringIO()
    def handle_data(self, d):
        self.text.write(d)
    def get_data(self):
        return self.text.getvalue()

def strip_tags(html):
    s = MLStripper()
    s.feed(html)
    return s.get_data()

Python2用です。

from HTMLParser import HTMLParser
from StringIO import StringIO

class MLStripper(HTMLParser):
    def __init__(self):
        self.reset()
        self.text = StringIO()
    def handle_data(self, d):
        self.text.write(d)
    def get_data(self):
        return self.text.getvalue()

def strip_tags(html):
    s = MLStripper()
    s.feed(html)
    return s.get_data()