Wie kann ich ein Bild aus einer Webseite herausfiltern und weiterverwenden z.B. speichern.
Habe unter anderem "mechanize" in Verwendung
mfg
razor01
Bild aus Webseite heraufiltern
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:
Dieses Beispiel lädt alle Bilder der gegebenen Website herunter.
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)
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.
Das ist ja gerade bei diesem Vorgehen eher kein Problem.razor01 hat geschrieben:jedoch verändert sich die src immer
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.
<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.
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.
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
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']
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"]
Das Leben ist wie ein Tennisball.
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.
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.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice