Der Zoo Basel hat eine Website, die intensiv auf asynchrones Javascript (Ajax) setzt – sich die anzuzeigenden Daten also erst nachträglich holt. Gleichzeitig verfügt der Zoo über einen umfangreichen Katalog der Tierarten mit jeweiligen News-Meldungen dazu. Man könnte also die Frage beantworten, welche Tierart der Medienstar ist unter den Zolli-Bewohnern und welche armen Geschöpfe noch nie mit einer News-Mitteilung beehrt worden sind.
Mit normalen Scrapern können Ajax-Inhalte nicht eingelesen werden. Ein stackoverflow-Nutzer beschreibt das so, dass die Seite gerendert werden muss und die meisten Server-Side-Scripts dies nicht tun. Er verweist auf Alternativen und auf einen manuellen Weg, der gar nicht so kompliziert ist und beim Zolli-Scraper zielführend.
Mittels Chrome Dev Tools habe ich (wie im verlinkten Beitrag beschrieben) die relevante Datei gefunden, deren URL schaut so aus:
http://www.zoobasel.ch/dmxDatabaseSources/view_news_tiere_url.php?TiereID=290
Dort liegen die Daten als JSON-Datei vor, was eine Weiterverarbeitung mit PHP sehr einfach macht. Eine zweite JSON-Datei führt die ID-Nummern der Tiere auf, das Script hat diese einzeln abgearbeitet (mittels Javascript-Reload und Übergabe einer Variabel*) und alle Infos in eine Datenbank geschrieben. Die Auswertung sah folgendermassen aus:
$alleeintraege = $wpdb->get_results( "SELECT * FROM zolli"); foreach ( $alleeintraege as $eintrag ) { $anzahlnachname[$eintrag->tierartname]++; $anzahlnachtiergruppe[$eintrag->tiergruppe]++; $tierartenmitnews[] = $eintrag->tierartname; } arsort($anzahlnachname); foreach ($anzahlnachname as $key => $val) { echo $key." (".$val.")<br/>"; } $armeschlucker = array_diff($alletierarten, $tierartenmitnews); var_dump($anzahlnachtiergruppe); var_dump($armeschlucker );
Das Resultat ist in unstrukturierter Form auf http://samuelhufschmid.ch/zolli/ zu finden. Und noch ein Wort zu den Ergebnissen: Mit 31 Mitteilungen sind die Gorillas die Medien-Stars des Basler Zollis – mehr dazu hier:
*diese Vorgehensweise habe ich bereits beschrieben, jedoch noch nicht veröffentlicht, weil die dazugehörige Recherche noch nicht abgeschlossen ist.