2017-02-02 9 views
0

Ich erstelle eine Anwendung, die eine Website crawlt, in einem Konto anmeldet und greift auf die Reiseinformationen des Benutzers.PHP Web Scraping - zurück Inhalt nach dem Laden von JavaScript

Sobald ich mich anmelde und auf die Seite mit der Liste der Reisekarten gehe, muss ich auf den Link klicken.

Also hier ist das Problem: der Link erscheint nur auf der Seite, sobald ein Javascript-Skript geladen (ich bin nicht sicher, welche). Wenn ich mein Crawlerscript ausführe und diese Seite drucke, kann ich den Link anzeigen (weil er das Javascript im Browser lädt). Wenn ich jedoch versuche, diese Seite zu crawlen, um diesen Link zu finden, findet er ihn nicht. Meine Annahme ist, dass diese PHP-Bibliothek keine Möglichkeit hat, Javascript (eine browserseitige Sprache) auf dem Backend auszuführen.

Wie kann ich die Seite html NACH dem alle JavaScript-Skripte geladen und verarbeitet haben?

Ich verwende Goutte zum Crawlen. Diese Bibliothek verwendet Symfony BrowserKit, die das Verhalten eines Webbrowsers simulieren soll, es wäre gut zu wissen, ob es eine Möglichkeit hat, JavaScript zu verarbeiten, bevor das HTML zurückgegeben wird.

Ich bin offen für jede Art von Lösung, was bedeutet, die Verwendung von verschiedenen Bibliotheken oder sogar eine andere Programmiersprache.

Vielen Dank im Voraus.

Antwort

1

Ich habe benutzerdefinierte curl package für Laravel.

Nach der Anmeldung müssen Sie die Anfragen genau überwachen [verwenden Sie Google Chrome's Registerkarte Netzwerk.].

gibt es ein paar Szenarien.

1) Website macht ajax request zu einer anderen URL. Sie müssen das url fangen und ajax request zu diesem url senden, um Daten zu erhalten.

2) Website verwendet javascript, um Seitendaten zu rendern. In diesem Fall sind die Daten bereits in den Quellcode [js] eingebettet. Sie müssen regex verwenden, um Daten von der Seite zu extrahieren.

Ich kann nur so viel Hilfe ohne Analyse von Anrufen, Seitenquelle.

1

BrowserKit und PHP allein können JavaScript nicht ausführen. Es gibt jedoch ein paar Optionen da draußen; Sie könnte so etwas wie Selen und WebDriver oder PhatomJS und automatisieren Dinge mit so etwas wie Codeception (die eigentlich eine Test Bibliothek ist aber könnte verwendet werden, zum Schaben) verwenden:

http://codeception.com/docs/modules/WebDriver

Der Nachteil hierbei ist, dass dieser Ansatz recht ist langsam und möglicherweise nicht mit der Hardware kompatibel, auf der Sie Ihre Skripts ausführen (z. B. ein Webserver ohne GUI oder Browser).

Ein anderer Ansatz wäre die Verwendung von ChromeDriver, das etwas schneller und leichter ist als Selenium und WebDriver.Anschließend können Sie alle diesem mit Laravel Dusk (wieder einem anderen Test Bibliothek aber gut geeignet für diese Art der Sache) automatisieren:

https://laravel.com/docs/master/dusk