Suchen von Bildern in HTML

Code-Stücke können hier veröffentlicht werden.
Antworten
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Hier bitte, hab ich mal für ein Programm geschrieben das mir automatisch Bilder "geklaut" hat *g*

Code: Alles auswählen

import htmllib, re, formatter, urlparse

class IMGParser(htmllib.HTMLParser):
   def __init__(self, URL, verbose = 0):
      htmllib.HTMLParser.__init__(self, verbose)
      self.URL            = URL
      self.a_bilder       = []
      self.src_bilder     = []
      self.a_keine_bilder = []

   def do_img(self, attrs):
      for src, location in attrs:
	 if src == "src":
	    _link_url = urlparse.urlparse(location)
	    _temp = _link_url[2].split("/")
	    local_name = _temp[-1]
	    if _link_url[0] != "" or _link_url[1] != "":
	       _img_url = location
	    else:
	       _img_url = urlparse.urljoin(self.URL, _link_url[2])
	    _src_bild = [local_name,_img_url]
	    self.src_bilder.append(_src_bild)

   def anchor_bgn(self, href, name, type):
      _link_url = urlparse.urlparse(href)              #zerlege URL zum Bild -
      _temp = _link_url[2].split("/")                  #Trennen von Pfad wo bild auf Server liegt anhand von /
      local_name = _temp[-1]                           #das ist der lokale name der Datei
      _pattern = r"([^\\[]*).(gif|jpg|jpeg|jpe)"           #Suche nach den type img gif. jpg.jpeg im localen namen
      _img_true = re.match(_pattern, local_name)       #        "

      if _img_true == None:                            #Wenn Link nicht zu einem bild führt
         self.a_keine_bilder.append(href)
      else:                                            #sonst:
         if _link_url[0] != "" or _link_url[1] != "":  #Wenn URL nicht realtiv dann:
            _img_url = href                            #href ist die fertige Adresse zum Bild
         else:                                         #sonst:
            _img_url = urlparse.urljoin(self.URL, _link_url[2]) #Adresse erstellen
         _a_bild = [local_name, _img_url]
	 self.a_bilder.append(_a_bild)



#url = "http://bilder.de/index.html"

#_host = urllib.urlopen(url)
#_h = IMGParser(url, formatter.NullFormatter(None))
#_h.feed(_host.read())


#print _h.a_keine_bilder
#print "\n"
#print _h.a_bilder
#print "\n"
#print _h.src_bilder
MfG
Andreas
nofuture
User
Beiträge: 16
Registriert: Montag 31. Juli 2006, 22:59

Was passiert in Zeile 14? src = "src"

Kriege da eine Fehlermeldung.
Benutzeravatar
SigMA
User
Beiträge: 181
Registriert: Sonntag 4. April 2004, 13:27
Wohnort: Freiburg
Kontaktdaten:

du bekommste wahrscheinlich eine Fehlermeldung weil es nicht richtig eingerückt ist nach dem for Block

SigMA
Leichtdio.de - Das Kreativ-Blog
http://www.leichtdio.de
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Beim dem code ist anscheinend bei der Umstellung auf Python Code tags die Einrückung verloren gegangen:

Code: Alles auswählen

class IMGParser(htmllib.HTMLParser):
   def __init__(self, URL, verbose = 0):
      htmllib.HTMLParser.__init__(self, verbose)
      self.URL            = URL
      self.a_bilder       = []
      self.src_bilder     = []
      self.a_keine_bilder = []

   def do_img(self, attrs):
      for src, location in attrs:
         print "t:" + src
         if src == "src":
            _link_url = urlparse.urlparse(location)
            _temp = _link_url[2].split("/")
            local_name = _temp[-1]
         if _link_url[0] != "" or _link_url[1] != "":
            _img_url = location
         else:
            _img_url = urlparse.urljoin(self.URL, _link_url[2])
         
         _src_bild = [local_name,_img_url]
         self.src_bilder.append(_src_bild)

   def anchor_bgn(self, href, name, type):
      _link_url = urlparse.urlparse(href)              #zerlege URL zum Bild -
      _temp = _link_url[2].split("/")                  #Trennen von Pfad wo bild auf Server liegt anhand von /
      local_name = _temp[-1]                           #das ist der lokale name der Datei
      _pattern = r"([^\\[]*).(gif|jpg|jpeg|jpe)"           #Suche nach den type img gif. jpg.jpeg im localen namen
      _img_true = re.match(_pattern, local_name)       #        "

      if _img_true == None:                            #Wenn Link nicht zu einem bild führt
         self.a_keine_bilder.append(href)
      else:                                            #sonst:
         if _link_url[0] != "" or _link_url[1] != "":  #Wenn URL nicht realtiv dann:
            _img_url = href                            #href ist die fertige Adresse zum Bild
         else:                                         #sonst:
            _img_url = urlparse.urljoin(self.URL, _link_url[2]) #Adresse erstellen
         _a_bild = [local_name, _img_url]
      
         self.a_bilder.append(_a_bild)
Zeile 14 überprüft nur ob das Attribut im img-Tag ein src-Attribut ist.
So jetzt müssts passen.
Für den unteren Teil musst Du noch das modul urllib importieren,

MfG
Andreas
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Warum fangen denn alle deine lokalen Variablennamen mit _ an?
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Du fragst mich im Jahr 2006 wieso 2003, gerade in diesem Beispiel, alle meine lokalen Variablennamen mit _ angefangen haben..

keine Ahnung :mrgreen:
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Naja, möchte dir nicht zu nahe träten aber der Code ist echt ein schlechter Programmierstiel ^^ Ich weis das weil ich so früher auch programmiert habe ^^ zuviel von den unterstrichen und teilweise undurchsichtige Namen (zB. a_keine_bilder. Wozu das a am Anfang?) ^^

Gott sei dank benutzt du nicht eine Variabel für 100 verschiedene Aufgaben wie ich damals xD --> tmp1, tmp2, tmp3 für 1K verschieden Aufgaben ^^

lg
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

XtraNine hat geschrieben:Naja, möchte dir nicht zu nahe träten aber der Code ist echt ein schlechter Programmierstiel
Programmieren ist mein Hobby, ich habe und werde auch kein Informatik studieren.
Alles was ich programmiere hat nur einen Zweck, nämlich mein Problem zu lösen.
Problem -> Lösung finden -> umsetzen -> Wenn das Programm nicht mehr gebraucht wird ab in den Müll :D
Dass ich irgendwas für die "Allgemeinheit" schreibe ist recht selten.
XtraNine hat geschrieben:(zB. a_keine_bilder. Wozu das a am Anfang?)
Des kann ich dir heute noch sagen :)
Da a steht für einen Link <a href= ...<img src .. </img></a> da ein Link aber auch auf ein Bild zeigen kann hab ich einfach unterschieden ...
(Thumbnails)

MfG und gute Nacht
Andreas
Antworten