2012-06-16 16 views
12

Web sitelerinden verileri kopyalamak ve bunu yaparken html kodlamasını kaldırmak için HTML Ayrıştırıcısını kullanıyorum. Güzel Çorba gibi çeşitli modüllerin farkındayım, fakat "dış" modüllere bağlı olmayan yoldan gitmeye karar verdim. Strip HTML from strings in PythonPython'da HTMLParser'ı Kullanma 3.2

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 çalışır: Eloff tarafından sağlanan bir kod kod yoktur. Ancak, yakın zamanda Python 3.2.x sürümüne geçtim ve yukarıda yazılan HTML Ayrıştırıcı koduyla ilgili hatalar buldum. hattına

Benim ilk hata puanı:

s.feed(html) 
... ve hata diyor ... Yani

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

, biraz araştırma sonra ben sıkı = Doğru" ekle "üst hattına Ancak

class MLStripper(HTMLParser, strict=True) 

... yapma, ben yeni hatayı alıyorum:

ne olacağını görmek için
TypeError: type() takes 1 or 3 arguments 

, ben "kendi" argüman kaldırıldı ve "sıkı = Doğru" ... hatasını vazgeçti hangi sol:

NameError: global name 'self' is not defined 

... ve bende "Tahminlerde tahmin ediyorum" hissi.

class MLStripper(HTMLParser) satırındaki üçüncü bağımsız değişkenin self ve strict=True'dan sonra ne olacağını bilmiyorum; Araştırma herhangi bir aydınlanmayı atmadı.

cevap

20

HTMLParser alt sınıfındasınız, ancak onun __init__ yöntemini çağırmıyorsunuz. Eğer __init__ yöntemle bir satır eklemeniz gerekir:

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

Ayrıca Python 3, ithalat çizgisidir: Bu değişikliklerle birlikte

from html.parser import HTMLParser 

, basit bir örnek çalışır. class satırını değiştirmeyin, bu alakalı değil.

+2

Mükemmel çalıştı, Thomas K. Çok teşekkür ederim! Komut dosyaları, "super() .__ init __()" kodunun eklenmesiyle mükemmel bir şekilde çalışıyor. – MilesNielsen

+0

Bu, AttributeError öğelerini de çözer: 'HTMLTagRemover' nesnesinin 'convert_charrefs' özniteliği yok ' super() .__ init __() Python2'de benim için gerekli DEĞİLDİR ancak Python3'teydi - teşekkürler –

İlgili konular