2017-07-09 1 views
1

Also in einem HTML-Dokument bei einer URL ich interessiere, die Informationen, die ich auf jeder Seite will nicht eindeutig durch das Tag um ihn herum, sondern durch das Tag vor , dass es so etwas wiePython: Wie kann HTMLParser Daten von einem Subtag verarbeiten

<div class="unique"> 
<span class="not unique> 
data I want to get 
</span> 
</div> 

In meiner HTMLParser Klasse sieht ich die handle_starttag Methode mit diesem

def handle_starttag(self, tag, attrs): 
    self.inLink = False 
    if tag == 'div': 
     for name, value in attrs: 
      if name == 'class' and value == 'unique': 
       self.inLink = True 
       self.lasttag = tag 
    if tag == 'span': 
     if self.lasttag == 'div' and self.inLink: 
      self.inlink = True 
      self.lasttag = tag 

overrided aber es funktioniert nicht. Warum setzt dies mein starttag nicht auf ein span-Tag innerhalb eines div-Tags, das class = "unique" hat, und wie wird das normalerweise gemacht?

+0

keine direkte Antwort auf Ihre Frage: Nur wenige Menschen die HTMLParser Klasse verwenden überhaupt direkt, für eine Vielzahl von Gründen. Die meisten von uns verwenden einen oder mehrere Produkte wie BeautifulSoup, Selen, Scrapy usw. –

+0

Danke für die Einsicht - je mehr ich recherchiert habe, desto mehr sehe ich diesen Punkt. Ich habe es tatsächlich geschafft, dieses Problem zu lösen, und habe unten eine Antwort geschrieben. –

+0

Gern geschehen. Und herzlichen Glückwunsch. nicht jeder kann das tun. Stellen Sie sich vor, Sie tun das für all das Kratzen, das heutzutage gemacht wird. –

Antwort

1

Managed dieses Problem zu beheben, indem Sie folgendermaßen vorgehen:

def handle_starttag(self, tag, attrs): 
     self.inLink = False 
     if tag == 'div': 
      for name, value in attrs: 
       if name == 'class' and value == 'unique': 
        self.inLinkReady = True 
     if tag == 'span': 
      if self.inLinkReady: 
       self.inLink = True 
       self.lasttag = tag 
       self.inLinkReady = False 

:)

Verwandte Themen