2012-06-16 9 views
12

私はHTML Parserを使用して、Webサイトからのデータを廃止し、HTMLコードを削除しています。私は美しいスープのような様々なモジュールを知っていますが、 "外側"のモジュールに依存しない道を選ぶことに決めました。 Eloffから供給されたコードのコードがあります:Strip HTML from strings in PythonPython 3.2でHTMLParserを使用

from HTMLParser import HTMLParser 

class MLStripper(HTMLParser): 
    def __init__(self): 
     self.reset() 
     self.fed = [] 
    def handle_data(self, d): 
     self.fed.append(d) 
    def get_data(self): 
     return ''.join(self.fed) 

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

これは、Python 3.1で動作します。しかし、私は最近、Python 3.2.xにアップグレードし、上記のようにHTML Parserコードに関するエラーが発生することを発見しました。ラインへ

私の最初のエラーポイント:

s.feed(html) 
...とエラーが言う...だから

AttributeError: 'MLStripper' object has no attribute 'strict' 

は、研究のビットの後、私は厳しい= true」を追加します

:「

class MLStripper(HTMLParser, strict=True) 

...それを作る、一番上の行にしかし、私は新たなエラーが発生します

TypeError: type() takes 1 or 3 arguments 

どうなるか見て、私は「自己」の引数を削除し、「=厳格な真」に残って...エラーをあきらめた:

NameError: global name 'self' is not defined 

を...と私が得ました「私は推測で推測している」という感じです。

strict=Trueの後に、class MLStripper(HTMLParser)行の3番目の引数が何であるかわかりません。研究はどんな啓蒙も投げなかった。

答えて

20

HTMLParserをサブクラス化していますが、__init__メソッドを呼び出していません。あなたの__init__メソッドに1行を追加する必要があります

def __init__(self): 
    super().__init__() 
    self.reset() 
    self.fed = [] 

また、Pythonの3のために、インポート行は次のようになります。これらの変更により

from html.parser import HTMLParser 

は、簡単な例が動作します。 class行を変更しないでください。これは関連しません。

+2

これは完璧に機能しました。Thomas K.ありがとうございました!スクリプトは、 "super().__ init __()"コードが挿入された状態で完全に動作しています。 – MilesNielsen

+0

AttributeError: 'HTMLTagRemover'オブジェクトに 'convert_charrefs'属性がありません super().__ init __()はPython2では必須ではありませんでしたが、Python3にあった –

関連する問題