Webcrawler

Laut Wikipedia (Quelle hier) ist ein Webcrawler ein Computerprogramm das automatisch das World Wide Web durchsucht und Webseiten analyisiert. Dies hört sich doch schon einem nach einem nützlichen Projekt an und dafür finden wir sicherlich einen Anwendungsfall.

TEIL 01 – Bedeutung und rechtliches – 05:06 min

TEIL 02 – HTML Elemente richtig auslesen – 03:12 min

  • Seitenstruktur
  • Inspect-Element
  • Identitäten von „<div>“-Klassen

TEIL 03 – Lasst uns crawlen! – 14:54 min

  • crawl.rb
  • open-uri
  • nokogiri
  • Umwandlung von Datentypen

TEIL 04 – In CSV Datei schreiben (z.B. für Excel) – 20:47 min

  • HTML Container finden und crawlen
  • Speichern der Daten in Arrays
  • open.CSV Methoden
  • Löschen von Leerzeichen innerhalb eines Strings

Teil 05 – MultiPage – Mehrere Seiten gleichzeitig auslesen – 19:27 min

  • Airbnb als Anwendungsbeispiel
  • Seitenzahl herausfinden
  • Dynamischen Link erstellen

Teil 06 – Ruby On Rails Applikation programmieren – 31:28 min

  • Cloud 9 IDE
  • Applikation erstellen
  • Notwendige Gems importieren
  • Scaffolding für Struktur der Filme
  • Analyse der Daten
  • Verwenden der Rails Console
  • Crawlstruktur in Rails einbinden
  • Applikation testen

 

Teil 01 – Bedeutung und Rechtliches


Doch bevor man überhaupt anfängt Inhalte von Seiten aus dem Web zu crawlen, muss man sich erstmal darüber im klaren sein was es für rechtliche Konsequenzen haben könnte. Wie können wir also feststellen ob eine Seite das Crawlen der Daten erlaubt oder uns verbieten.

Hilfe bekommen wir über die robots.txt Datei. Begeben wir uns beispielsweise auf die Seite der International Movie Database – www.imdb.com und hier wenn wir die URL auf “/robots.txt” erweitern, gelangen wir direkt zur robots.txt von imdb. Im Kommentarfeld findet man einen Hinweis mit Yahoo! Wenn wir weiter nach unten scrollen stellen wir fest, dass der untere Bereich für alle anderen gilt, also auch für uns und unseren selbst programmierten Webcrawler. Der Hinweis Disallow: /Title/ASIN bedeutet für uns, dass wir keine legale Möglichkeit haben die Daten der einzelnen Filme von imdb.com zu crawlen.

Doch sehen wir uns darüber hinaus doch mal die Conditions of Use an. http://www.imdb.com/conditions mit Hilfe von STRG+F also der Suchfunktion im Browser und der Eingabe des Wortes “Crawl” finden wir gleich den entsprechenden Absatz. Wie wir sehen ist ohne schriftliche Erlaubnis der Lizenzabteilung von imdb ein crawlen der Seite in jeglicher Form untersagt.

Nehmen wir doch als weiteres Beispiel die Internetseite http://www.rottentomatoes.com/ hier sehen wir uns wieder die robots.txt genauer an und wie wir feststellen können ist das crawlen auf dieser Seite nicht untersagt. Perfekt, wir haben also ein Portal mit gelisteten Filmen gefunden und können hiermit arbeiten.

Links

http://www.imdb.com/robots.txt
http://www.imdb.com/title/tt2379713/
https://de.wikipedia.org/wiki/Robots_Exclusion_Standard
http://www.imdb.com/conditions
http://www.rottentomatoes.com/robots.txt

Teil 02 – HTML Elemente richtig auslesen


Bevor wir unseren eigenen Web-Crawler in der Ruby Programmiersprache erstellen, müssen wir zuerst verstehen wie unsere Zielseite überhaupt aufgebaut ist. Wir befinden uns zum Start wieder auf unserer Seite www.rottentomatoes.com und suchen hier doch einmal einen beliebigen Film. 

Ich nehme wieder einmal James Bond. Wenn wir hier nach unten scrollen dann sehen wir die Darstellung des Films. Die einzelnen Seiten sind immer gleich aufgebaut. Ruft man beispielsweise die Seite von Hunger Games auf, dann unterscheidet sich diese nicht.  Also der Aufbau ist definitiv gleich.

Daher können wir nun mit “rechtsklick” und “Element untersuchen” die einzelnen Elemente der Webseite auswählen. Starten wir doch zuerst einmal mit dem Titel. Wir klicken auf den Titel und hier unten in der HTML Übersicht sehen wir, dass der Titel innerhalb des <h1> Container gespeichert wird. Und so können wir nun alle Informationen sammeln die später gecrawlt werden sollen. Beispielsweise auch das Rating der Zuschauer, dieses wird in einer Spalte namens “ratingValue” gespeichert.

Zusätzlich prüfen wir noch wo das Bild abgespeichert wird und wir sehen hier innerhalb einer div names “movie-image-section”

Diese Episode gilt nur als kleine Einführung wie man solche HTML Dokument am einfachsten auslesen kann beziehungsweise die einzelnen Element selektiert.

Links

http://www.rottentomatoes.com/m/spectre_2015/
http://www.rottentomatoes.com/m/the_hunger_games_mockingjay_part_2/

Teil 03 – Lasst uns crawlen!


 

Teil 04 – In CSV Datei schreiben (z.B. für Excel)


Teil 05 – MultiPage – Mehrere Seiten gleichzeitig auslesen


Bis zum aktuellen Zeitpunkt kann unser Crawler nur Ergebnisse auf einer einzigen Seite sammeln. Wir werden nun einen Schritt weiter gehen und den Crawler so anpassen, dass wir mehrere Seiten gleichzeitig analysieren können.

Gehen wir einmal von folgender Situation aus. Wir besitzen eine Wohnung und möchten nun herausfinden zu welchem Preis wir diese bei Airbnb anbieten können. Dazu wäre es hilfreich eine komplette Auflistung der bereits vorhandenen Appartements mit den Preisen anzufertigen. Der übliche Weg den Vermieter gehen, ist eigenhändig jede einzelne Seite abklappern und die Beschreibung und den Preis in eine Excel Liste kopieren. Gut jetzt denkst du dir vielleicht, dann investiere ich eben mal ein oder zwei Stunden, dass Problem hierbei ist: die Daten werden nach einer Woche wieder alt und das gleiche Spiel geht wieder von vorne los. Für genau solche Tätigkeiten können wir unseren Webcrawler perfekt einsetzen.

Wir befinden uns hier auf Airbnb und suchen nach einem beliebigen Ort, beispielsweise San Diego, Kalifornien. Warum? Erstens weil San Diego ein traumhafter Ort zum leben ist und zweitens weil diese Küstenstadt über eine Million Einwohner hat und somit hunderte von Appartements gelistet sind.

Die Seite von Airbnb zeigt uns an, dass mehr als 300 Treffer gefunden wurden. Fokussieren wir uns doch einmal auf die URL der Seite https://www.airbnb.de/s/san-diego zum Test ändern wir einmal san-diego in new-york ab. Funktioniert! Die URL ist also immer gleich aufgebaut: /s/Stadtname.

 

Teil 06 – Ruby On Rails Applikation programmieren


Ich programmiere diese App nicht wie üblich innerhalb meiner Linux Umgebung sondern verwende die Cloud IDE Cloud9. Ich habe bereits in einer meiner “Tools für Web-Entwickler Folge” Cloud9 im Detail gezeigt. Wenn du also mehr erfahren möchtest, dann findest du unten in meiner Beschreibung einen Link zum Video.

Zu Beginn erstellen wir eine neue Ruby On Rails Applikation https://c9.io/new

Die Befehle rails new appname benötigst du bei der Verwendung von Cloud9 nicht, denn dies geschieht bereits automatisch. Gleich einmal den Server starten und wie wir sehen es wurde alles einwandfrei installiert.

Wir begeben uns in unser Gemfile und hier fügen wir nun ein paar Gemfiles hinzu. Für das Frontend verwenden ich das Framework Bootstrap.



Quellen: https://de.wikipedia.org/wiki/Webcrawler