Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Ich möchte aus der google Bildersuche die URLs der Bilder direkt auslesen. Im Quelltext finden sich aber nur die Links der ersten 100 Bilder. Wie komme ich an die URLs der anderen Bilder?
Die anderen Bilder lassen sich mit der Maus öffnen. Kann es sein, dass der Link evtl. mit JavaScript nachgeladen wird? Bin ein wenig ratlos.
Wie liest du die URLs aus? Wenn es z.B. mit Python + Selenium ist, dann kannst du ja versuchen via Code zu scrollen und so das erneute Laden von weiteren Bildern zu erzwingen.
Ich scrolle manuell ganz nach unten bis zum Ende und habe somit 809 Treffer. Die URLs zu den 100 Bildern stehen ganz unten im HTML-Code, in der Zeile, wo auch die JavaScript-Funktion AF_initDataCallback vorhanden ist.
Ich frage mich, wie ich an die URLs der 809 Bilder komme. Würde notfalls auch mit python oder node.js arbeiten.
F12 drücken, das hier in die Konsole eingeben und Enter.
Code:
var elements = document.getElementsByClassName("islrc")[0];
for (let element of elements.children) {
console.log(element.getElementsByTagName("img")[0]?.src);
}
Der Link zu den richtigen Bildern wird erst beim Klick auf das Vorschaubild geladen. Das heißt für dein Vorhaben müsstest du zunächst alle Bilder anklicken.
Code:
var elements = document.getElementsByClassName("islrc")[0].children;
var count = 0;
var iv = setInterval(function() {
elements[count++].getElementsByTagName("a")[0]?.click();
if (count === elements.length) {clearInterval(iv); console.log("done");}
}, 1000);
Dieses Script klickt sich durch alle Bilder durch (je eines pro Sekunde, die letzte Zahl unten ist die Wartezeit).
Das Problem ist jedoch, dass Google das nicht zu mögen scheint. Nach einer Weile wird die Seite einfach automatisch neu geladen.
Vielleicht klappt es mit einer höheren Wartezeit zwischen den Bildern. Besser wäre nachzuvollziehen woher Google die Infos lädt und genau dort anzufragen, ist aber etwas Zeitaufwändiger.
Danach kannst du dir hiermit alle Links ausgeben:
Code:
var elements = document.getElementsByClassName("islrc")[0].children;
for (let element of elements) {
try { console.log((element.getElementsByTagName("a")[0]?.href||"").split("imgurl=")[1].split("&")[0].split("%3A").join(":").split("%2F").join("/")); } catch{}
}