Webscraping mit PhantomJS + Laravel 5.4

16. Januar 2017 Category: Allgemein

1. PhantomJS

Wer schon immer mal versucht hat Browserzugriffe zu automatisieren oder Headless Testing mit z.B. Jasmine oder QUnit auf Webseiten zu betreiben ist mit PhantomJS an der richtigen Stelle.

PhantomJS ist ein Browser ohne Browser Interface, der per Kommandozeile aufgerufen werden kann. Er unterstützt DOM handling, CSS Selektoren, JSON, Canvas und SVG. Es lassen sich neben Aufrufen und der Verarbeitung von Javascript Befehlen auch Screenshots und HAR Files (fürs Performance Monitoring z.B. mit YSlow oder Jenkins) erstellen.

Beispiel #1:

Ein einfaches Beispiel für die Verwendung von PhantomJS ist das Öffnen einer Webseite und Speichern eines Screenshots:

Beispiel #2:

Wir öffnen eine Seite und lassen uns den Titel sowie den ersten Absatz des Artikels als JSON Objekt ausgeben:

Da jQuery in der Seite bereits geladen wird benötigen müssen wir es nicht mehr einbinden.

Der Aufruf per CLI erfolgt dann einfach:

phantomjs –ssl-protocol=any scrape.js https://de.wikipedia.org/wiki/The_Rolling_Stones

{„title“:“The Rolling Stones“,“excerpt“:“The Rolling Stones sind eine 1962 gegründete englische Rockband. Sie zählen zu den langlebigsten[1] und kommerziell erfolgreichsten[2] Gruppen in der Rockgeschichte. 1989 erfolgte die Aufnahme in die Rock and Roll Hall of Fame.“}

2. PhantomJS + Laravel

Super lässt sich das ganze in Laravel Queues einbinden. Wer z.B. vorhat große Mengen an URL’s zu scrapen ist hier gut aufgehoben. Mehr zu Laravel Queues findet Ihr hier oder auch auf laracasts.com.

Hier ein Beispiel für eine einfache Job Klasse:

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn