2010-09-02 16 views
0

Un peu lié à ma question précédente. Je fais un simple analyseur html pour jouer avec Python 2.7. Je voudrais avoir plusieurs types d'analyse, IE peut analyser les liens, les balises de script, les images, ect. J'utilise le module HTMLParser, donc mes premières pensées étaient juste de faire une classe séparée pour chaque chose que je veux analyser. Mais cela semblait plutôt stupide. Existe-t-il un moyen de faire cela sans créer plusieurs classes? Je suis plus familier avec C#, donc j'ai pensé que je passerais simplement un paramètre sur la méthode init pour spécifier exactement quoi analyser, tout comme je le ferais dans .Net, mais je ne semble pas le faire correctement . Ça ne marche pas, et ça ne «regarde» pas juste. Voici le code de travail actuel: Comment est-ce que je modifierais ceci pour que je puisse juste avoir une classe, et les paramètres qui sont passés indiquent le type de balises HTML à analyser?Python: Vérifie la valeur d'une variable passée en paramètre dans une autre méthode?

class LinksParser(HTMLParser): 
    def __init__(self, url): 
    HTMLParser.__init__(self) 
    req = urllib2.urlopen(url) 
    self.feed(req.read()) 

    def handle_starttag(self, tag, attrs): 
    if tag !='a': return 
    for name, value in attrs: 
     print("Found Link --> [{0}]{1}".format(name, value)) 

Répondre

1
class TagParser(HTMLParser): 

    def __init__(self, url, tag): 
     HTMLParser.__init__(self) 
     self.tag = tag 
     req = urllib2.urlopen(url) 
     self.feed(req.read()) 

    def handle_starttag(self, tag, attrs): 
     if tag != self.tag: return 
     for name, value in attrs: 
      print("Found Tag({2}) --> [{0}]{1}".format(name, value, self.tag)) 
+0

oublié sur l'utilisation self.everything en python. Merci. – Stev0

+0

@ Stev0, de rien! –

0

Quelque chose comme ça:

class MyParser(HTMLParser): 
    def __init__(self, url, tags): 
     HTMLParser.__init__(self) 
     self.tags = tags 
     req = urllib2.urlopen(url) 
     self.feed(req.read()) 

    def handle_starttag(self, tag, attrs): 
     if tag not in self.tags: return 
     for name, value in attrs: 
      print("Found Tag --> [{0}]{1}".format(name, value)) 

instancier la classe avec quelque chose comme:

p = MyParser("http://www.google.com", [ 'a', 'img' ])