Seite 1 von 1

img-Tags aus HTML-Datei parsen

Verfasst: Samstag 6. März 2004, 13:40
von Cortex
Ich möchte eine HTML-Datei parsen, die verschiedene Links enthält.
Die Links zu parsen ist kein Problem. Doch in den Links sind ab und zu auch Bilder. Wobei der Name des Links dann im Alt-Parameter steht. Ich schaffe es nicht den Parameter auszulesen. Kann jemand helfen?

Code: Alles auswählen

class Parser(htmllib.HTMLParser):
  def __init__(self, verbose=0):
    self.anchors = {}
    f = formatter.NullFormatter()
    htmllib.HTMLParser.__init__(self, f, verbose)
  def anchor_bgn(self, href, name, type):
    self.save_bgn()
    self.anchor = href
  def anchor_end(self):
    text = string.strip(self.save_end())
    if self.anchor and text:
      self.anchors[text] = self.anchors.get(text, []) + [self.anchor]
So funktioniert es mit den Links, aber wie sieht eine Funktion aus die andere Tags parst.
Ich verstehe die Funktionen save_bgn(), save_end() und handle_image() nicht so richtig.
Würde mich freuen wenn sich jemand damit schon mal beschäftigt hat.

Verfasst: Samstag 6. März 2004, 13:56
von Milan
Hi. Kannst du mal bitte ein Beispiel geben, wie ein Ergebnis aussehen soll, oder was gemacht werden muss? Ich habe noch nie mit der htmllib gearbeitet :oops: und weiß nicht, was der Parser als Ergebnis leisten soll. Soll etwas umfromatiert werden, oder werden hier Informationen extrahiert?

Milan

Verfasst: Sonntag 7. März 2004, 02:04
von Cortex
Es soll etwas extrahiert werden und in eine DB oder Datei geschrieben werden.
Wie das passiert ist nicht das Problem.

<A HREF="CDs/ibo/ibo1cd021.html" CLASS="n">Name<DIV CLASS="n2">News</DIV></A>

Ungefähr so sehen die Tags aus.
Und so sollte die Ausgabe aussehen.

CDs/ibo/ibo1cd021.html ; n : Name ; n2 : News ;

Code: Alles auswählen

def handle_image(self, source, alt, ismap, align, width, height):
  print source, alt
So bekomme ich für jedes Bild eine Ausgabe.
Nur weitere Parameter wie class bekomm ich nicht...?

Verfasst: Donnerstag 11. März 2004, 18:39
von Milan
Hi. Um ehrlich zu sein: Ich komm mit dem HTML-Parser immer noch nicht zurecht. aber ich glaube, ich hab dich soweit verstanden, dass du nur die Informationen Linkadresse und description mit den jeweiligen Classes willst. Hier würde ich mir einfach zwei RE's basteln, die das gleiche erfüllen. Wenn du noch ein wenig Geduld hast mach ich das auch, aber ich hab erst ab dem Wochenende mal wieder mehr Zeit in die Materie einzusteigen.

mfg, Milan

Verfasst: Freitag 19. März 2004, 15:47
von romulus
Folgenden Code benutze ich:

Code: Alles auswählen

from sgmllib import SGMLParser

class MeinParser(SGMLParser):
	
	def reset(self):
		SGMLParser.reset(self)
	def start_form(self, attrs):
		name = [v for k, v in attrs if k=='name']
		
		if name == ['Formular_Team']:
			self.isFormular = 1 
   
   def end_form(self):
		self.isFormular = 0 
Das Tag sieht dabei so aus: <form name=Formular_Team ...> Die Attribute zu einem Tag stehen beim SGMLParser im Parameter attrs.