2016-06-07 16 views
0

Ich versuche, einige Bilder von Tripadvisor mit urllib herunterladen, aber alles, was ich für die URL in das src-Feld aus der html erhalten ist thisKann ich ein Lazy-Load-Image herunterladen?

ich einige der Forschung getan haben und ich fand heraus, dass diejenigen, faul Last sind Bilder ... Gibt es eine Möglichkeit, sie herunterzuladen?

+0

Der Link, den Sie nicht – BradTheBrutalitist

+0

nicht gab arbeiten mit diesem tut mir leid, versuchen https://www.tripadvisor.it/Restaurant_Review-g3174493-d3164947-Reviews-Le_Ciaspole-Tret_Fondo_Province_of_Trento_Trentino_Alto_Adige.html – WisdomPill

+0

Sie ein verwenden könnte Hyperlink oder Sie könnten Linksklick und gehen Sie zu inspizieren und dann finden Sie das Bild auf der Elementseite. – BradTheBrutalitist

Antwort

0

Sie eine Liste der Bilder von Javascript extrahieren können die Beautiful Soup und json Module verwenden, dann über die Liste iterieren und rufen Sie die Bilder, die Sie interessiert sind

EDIT:.

Das Problem war, dass Die Bilder haben denselben Namen und wurden überschrieben. Das Holen der ersten drei Bilder ist trivial, aber Verweise auf die anderen Bilder im Karussell werden nicht geladen, bis das Karussell geöffnet wird, also ist das schwieriger. Für einige Bilder können Sie eine Version mit höherer Auflösung finden, indem Sie "Foto-s" im Pfad durch "Foto-w" ersetzen, aber herausfinden, dass tiefer in die Javascript-Logik eingetaucht werden muss.

import urllib, re, json 
from bs4 import BeautifulSoup as bs 

def img_data_filter(tag): 
    if tag.name == "script" and tag.text.strip().startswith("var lazyImgs"): 
     return True 
    return False 

response = urllib.urlopen("https://www.tripadvisor.it/Restaurant_Review-g3174493-d3164947-Reviews-Le_Ciaspole-Tret_Fondo_Province_of_Trento_Trentino_Alto_Adige.html") 
soup = bs(response.read(), 'html.parser') 
img_data = soup.find(img_data_filter) 

js = img_data.text 
js = js.replace("var lazyImgs = ", '') 
js = re.sub(r";\s+var lazyHtml.+", '', js, flags=re.DOTALL) 

imgs = json.loads(js) 
suffix = 1 

for img in imgs: 
    img_url = img["data"] 

    if not "media/photo-s" in img_url: 
     continue 

    img_name = img_url[img_url.rfind('/')+1:-4] 
    img_name = "%s-%03d.jpg" % (img_name, suffix) 
    suffix += 1 

    urllib.urlretrieve(img_url, img_name) 
+0

Danke, aber ich wollte ein paar Bilder für das Restaurant herunterladen. – WisdomPill

+0

Ihr Algorithmus bekommt nur einen von ihnen ... Der mit dem Link "Tutte das Foto der Visitatori" ... Können Sie mir erklären, wie Sie die ersten 3 oder 4 davon bekommen? Und warum lädt dein Algorithmus sie nicht herunter? Sind das nicht auch Bilder? – WisdomPill

+0

Vielen Dank ... Eigentlich habe ich es schon selbst angepasst aber deiner Meinung nach ist dein Schnitt besser. – WisdomPill