Wenn Sie Informationen über Webseiten kragen, stoßen Sie häufig auf Probleme, bei denen asynchrone Ladeinhalte nicht direkt erhalten werden können, z. Diese Art von Inhalten wird normalerweise dynamisch über die Ajax -Technologie geladen, was für traditionelle Crawler schwierig ist, um sie zu erfassen.
Asynchrones Laden bedeutet, dass nur ein Teil des Inhalts beim ersten Laden der Webseite wiedergegeben wird und der Rest asynchron durch Hintergrundanforderungen abgeschlossen ist. Diese Methode verbessert die Reaktionsgeschwindigkeit und die Benutzererfahrung von Webseiten, bringt aber auch Herausforderungen für das Kriechen von Daten.
Selenium ist ein automatisiertes Test -Tool, mit dem echte Benutzer im Betrieb von Browsern simulieren und JavaScript -Code ausführen können, um vollständige asynchrone Daten zu laden. Indem Sie den Browser automatisch auf der Seite scrollen lassen und bis zum Abschluss des Ladens warten, können Sie den dynamisch generierten Inhalt kriechen.
$ driver = remotewebdriver :: create ($ host, wandecapabilities :: Firefox ()); $ driver-> Get ($ url); $ driver-> executescript ("window.scrollto (0, document.body.scrollHeight);"); // scrollen Sie den Seitenschlaf (5); // Warten Sie, bis die asynchronen Daten für die Fertigstellung $ html = $ driver-> getPageSource () geladen werden.
Achten Sie auf den Leistungsverbrauch, wenn Sie ihn verwenden, um übermäßige häufige Scrollen- und Ladevorgänge zu vermeiden.
Einige Websites geben die asynchron geladenen Daten über die Schnittstelle zurück und fordern die Schnittstelle direkt an, Daten in JSON oder anderen Formaten effizient zu erhalten. Durch die Analyse von Webseiten -Netzwerkanforderungen und das Erforschen der entsprechenden API -Schnittstelle können Sie das Rendieren der Seite überspringen und die erforderlichen Informationen schnell erfassen.
$ url = "http://xxxxx.com/api/xxxx"; $ data = file_get_contents ($ url); $ json = json_decode ($ data, true);
Wenn die Schnittstelle Berechtigungsbeschränkungen enthält, müssen Sie zunächst den Anmeldung oder einen anderen Überprüfungsprozess abschließen.
Phantomjs ist ein interfaceless Browser, der JavaScript -Code ausführen, asynchrone Inhalt rendern und die vollständige HTML exportieren kann. In Kombination mit der PHP -Call -Befehlszeilenmethode kann asynchrones Datenkriechen realisiert werden.
$ js = "var page = required ('webage'). create (); page.open ('". $ url."', Funktion (Status) { if (Status === 'Erfolg') { console.log (page.content); } Phantom.exit (); }); "; $ html = exec ("phantomjs -e '". $ js. "'");
Bevor Sie diese Methode verwenden, müssen Sie PhantomJs installieren und sicherstellen, dass die PHP -Umgebung die EXEC -Funktionen unterstützt.
Die asynchrone Belastung ist eine Technologie, die häufig von modernen Webseiten verwendet wird, die Krablern bestimmte Schwierigkeiten bringt. Über Selen, simulieren Sie Browseroperationen, analysieren Sie die asynchrone Schnittstelle, um Daten direkt abzurufen und Webseiteninhalte mithilfe von Phantomjs zu rendern. Diese drei Lösungen können das Problem des kriechenden asynchronen Inhalts effektiv lösen. Entwickler können die geeignete Methode flexibel nach den spezifischen Bedürfnissen auswählen, um die Effizienz und Stabilität der Crawler zu verbessern.