Ho utilizzato HTML Parser per scartare i dati dai siti Web e rimuovere la codifica html mentre lo facevo. Sono a conoscenza di vari moduli come Beautiful Soup, ma ho deciso di seguire il percorso di non dipendere dai moduli "esterni". C'è un codice fornito da Eloff: Strip HTML from strings in PythonUtilizzo di HTMLParser in Python 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()
Funziona in Python 3.1. Tuttavia, di recente ho eseguito l'aggiornamento a Python 3.2.x e ho riscontrato che ricevo errori relativi al codice HTML Parser come scritto sopra.
miei primi punti di errore alla linea:
s.feed(html)
... e l'errore dice ...
AttributeError: 'MLStripper' object has no attribute 'strict'
Così, dopo un po 'di ricerca, aggiungo "rigorosa = True "per la linea superiore, il che rende ...
class MLStripper(HTMLParser, strict=True)
Tuttavia, ottengo il nuovo errore di:
TypeError: type() takes 1 or 3 arguments
Per vedere cosa sarebbe successo, ho tolto l'argomento "auto" e rimane in "stretta = True" ... che ha dato l'errore:
NameError: global name 'self' is not defined
... e ho avuto il sentimento "Sto indovinando su ipotesi".
Non ho idea di quale sarebbe il terzo argomento nella riga class MLStripper(HTMLParser)
, dopo self
e strict=True
; la ricerca non ha gettato alcun chiarimento.
Che ha funzionato perfettamente, Thomas K. Grazie mille! Gli script funzionano perfettamente ancora una volta con quel codice "super() .__ init __()" inserito. – MilesNielsen
Questo risolve anche l'attributo : L'oggetto 'HTMLTagRemover' non ha attributo 'convert_charrefs' super() .__ init __() NON era richiesto in Python2 per me ma era in Python3 - grazie –