À l'aide de HTMLParser en Python 3.2
J'ai été en utilisant l'Analyseur HTML pour la démolition de données à partir de sites web et de les dépouiller de codage html, tout en le faisant. Je suis conscient des différents modules tels que les Belles de la Soupe, mais a décidé de descendre dans le chemin de la pas en fonction de "l'extérieur" des modules. Il y a un code code fourni par Eloff: Bande de HTML à partir de chaînes de caractères en Python
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()
Il fonctionne en Python 3.1. Cependant, j'ai récemment mis à niveau vers Python 3.2.x et ont découvert que j'avais des messages d'erreurs concernant l'Analyseur HTML code comme écrit ci-dessus.
Ma première erreur, points à la ligne:
s.feed(html)
... et le message d'erreur indique ...
AttributeError: 'MLStripper' object has no attribute 'strict'
Donc, après un peu de recherche, j'ai ajouter "strict=True" à la ligne du haut, faisant d'elle...
class MLStripper(HTMLParser, strict=True)
Cependant, j'ai un nouveau message d'erreur:
TypeError: type() takes 1 or 3 arguments
Pour voir ce qui allait arriver, j'ai enlevé le "soi" de l'argument et de la gauche dans la "stricte=True"... ce qui a donné l'erreur:
NameError: global name 'self' is not defined
... et j'ai eu le "je devine que sur des suppositions" sentiment.
Je n'ai aucune idée de ce que le troisième argument dans le class MLStripper(HTMLParser)
ligne serait, après self
et strict=True
; la recherche ne les jetez pas tout de l'illumination.
OriginalL'auteur MilesNielsen | 2012-06-16
Vous devez vous connecter pour publier un commentaire.
Vous êtes sous-classement
HTMLParser
, mais vous n'êtes pas à l'appel de sa__init__
méthode. Vous devez ajouter une ligne à votre__init__
méthode:Aussi, pour Python 3, la ligne d'importation est:
Avec ces changements, un exemple simple fonctionne. Ne changez pas le
class
ligne, ce n'est pas connexe.Cela résout également les AttributeError: 'HTMLTagRemover' objet n'a pas d'attribut "convert_charrefs" super().__init__() n'était PAS nécessaire dans Python2 pour moi, mais a été en Python3 - merci
OriginalL'auteur Thomas K