Seite 1 von 1
Bild aus Webseite heraufiltern
Verfasst: Montag 13. Juli 2009, 20:19
von razor01
Wie kann ich ein Bild aus einer Webseite herausfiltern und weiterverwenden z.B. speichern.
Habe unter anderem "mechanize" in Verwendung
mfg
razor01
Verfasst: Montag 13. Juli 2009, 20:43
von snafu
Indem du nach dem entsprechenden <img>-Tag suchst und dir das runterlädst, was in "src" steht.
Verfasst: Montag 13. Juli 2009, 20:54
von lunar
In dem du mit einem HTML-Parser (html5lib, lxml.html oder BeautifulSoup) die Seite nach dem relevanten "img"-Tag durchsuchst, dessen "src"-Attribut auswertest und anschließend das Bild herunterlädst. Mit lxml.html sähe das so in etwa aus:
Code: Alles auswählen
from urllib import urlretrieve
from urlparse import urljoin
import lxml.html
url = 'http://example.com/asite'
document = lxml.html.parse(url)
for src in document.xpath('//img/@src'):
image_url = urljoin(document.getroot().base_url, src)
urlretrieve(image_url, filename=src)
Dieses Beispiel lädt alle Bilder der gegebenen Website herunter.
Verfasst: Dienstag 14. Juli 2009, 09:47
von razor01
Also ich weiss in welchem tag sich das bild befindet
jedoch verändert sich die src immer
kann mir vielleicht jemand einen code hierfür zeigen
Verfasst: Dienstag 14. Juli 2009, 09:57
von snafu
Woher sollen wir jetzt wissen, welches spezielle Tag du meinst? Ein etwas allgemeineres Beispiel hat dir Lunar ja schon gegeben. Zeig halt mal den zugehörigen HTML-Code und sag, welches Tag du haben möchtest.
razor01 hat geschrieben:jedoch verändert sich die src immer
Das ist ja gerade bei diesem Vorgehen eher kein Problem.
Verfasst: Dienstag 14. Juli 2009, 10:06
von Karl
Wenn du nur einen Tag auswerten willst, kannst du das ja auch fix mit Regex machen.
<img src=\'(.*)\'> oder sowas. Aber dann musst du halt gucken, welches Bild du runterlädst. Aber normalerweise ist da ja immer "eindeutiger" HTML Code drumherum den du dann auch noch in die Suche miteinbeziehen kannst, so dass du das richtige Bild runterlädst ..
Wenn du aber mehr machen willst als nur das, wäre ein HTML-Parser echt nicht schlecht.
Verfasst: Dienstag 14. Juli 2009, 10:14
von lunar
Wenn man das schon mit regulären Ausdrücken machen will, dann wenigstens richtig. In deinem Beispiel fehlt das Fragezeichen, um das "*" als nicht-greedy zu markieren.
Verfasst: Dienstag 14. Juli 2009, 10:37
von Karl
Das war auch nur ein unüberlegtes Beispiel und sollte eher als Pseudocode dienen, da der Ausdruck sowieso alle <img>-Tags matchen würde und man ihn wie gesagt noch anpassen müsste.
imho funktioniert der reguläre Ausdruck auch ohne Fragezeichen. Aber vielleicht gibt es ja Ausnahmefälle, in welchen der Ausdruck ohne ? fehlerhaft/unerwartet arbeitet. Dann wäre es nett, wenn du mich aufklären würdest
Code: Alles auswählen
>>> s = "<html><dfbdfgdfpigjfdr<img src='test'><ewikjrfwiet6_/dlfdsfk>"
>>> import re
>>> re.findall('<img src=\'(.*)\'>', s)
['test']
Verfasst: Dienstag 14. Juli 2009, 10:51
von EyDu
Code: Alles auswählen
>>> s = "<html><dfbdfgdfpigjfdr<img src='test'><img src='spam'><ewikjrfwiet6_/dlfdsfk>"
>>> import re
>>> re.findall('<img src=\'(.*)\'>', s)
["test'><img src='spam"]
Bei "normalen" Seiten ist das keine Ausnahme, eher die Regel.
Verfasst: Dienstag 14. Juli 2009, 11:00
von Karl
Ah okay, so gibt das natürlich Sinn. Danke für das Aufklären.
Ich habe gedacht, dass die ' ' drumherum quasi als Grenze dienen.
Irgendwie ein merkwürdiges Verhalten. Naja, dann eben mit einem nicht-greedy Fragezeichen

Verfasst: Dienstag 14. Juli 2009, 11:14
von lunar
Das Verhalten ist nicht merkwürdig, sondern zu erwarten und dokumentiert. Übrigens muss man auch berücksichtigen, dass HTML neben einfachen auch doppelte Anführungszeichen erlaubt.
Verfasst: Dienstag 14. Juli 2009, 11:35
von Karl
Klar ist es dokumentiert und deshalb zu erwarten, nur eben für nicht so Bewanderte (wie mich) erstmal merkwürdig

Da man ja wie ich denken könnte, dass die ' ' wie gesagt quasi als Grenze für das (.*) dienen. Ich werde mir mal genauer angucken, warum es denn nicht so ist und man extra ein non-greedy Verhalten erzwingen muss.
Verfasst: Mittwoch 15. Juli 2009, 07:57
von Leonidas
Und ``<img class="downloadlink" src="...">`` findet es auch nicht. Der Mythos dass man zum scrapen von HTML Regular Expressions gut nutzen ist eben genau das: ein Mythos.