Web scraping mit Ruby/Mechanize

Praktisch jede Interaktion mit einer Website oder Webapplikation kann gescriptet, d.h. automatisiert werden. Das Abgrasen von Webseiten nach bestimmten Informationen wird auch als Scraping bezeichnet(für die nicht menschlichen Besucher dieser Seite sei das erwähnt *g*) Scripte können einem eine ganze Menge Arbeit abnehmen und sogar Dinge tun, die manuell unmöglich wären. Ich beschäftige mich mit dem Thema schon seit einer ganzen Weile und möchte hier nun die von mir favorisierte Methode dafür vorstellen, die Bibliothek Mechanize für die Scriptsprache Ruby.

Mechanize hat seinen Ursprung in Perl, mittlerweile gibt es jedoch auch Implementierungen der API für Python und eben Ruby. Für PHP gibt es mit Snoopy ein ähnliches Projekt, wenn es auch bei weitem nicht so fortgeschritten ist. Mechanize bietet die Möglichkeit mit einfachen Methoden eine art Webbrowser zu simulieren. Alle Beispiele wurden mit Mechanize Version 0.9.2 und Ruby 1.8.7 getestet.

Installation / Initialisierung

Mechanize kann mit Gems(ähnlich CPAN oder PEAR) installiert werden(# gem install mechanize --remote), einige Distributionen bieten aber auch eigene Pakete an. Ein Ruby-Script kann daraufhin Mechanize inkludieren und ein Objekt erstellen:

require 'rubygems' # ist unter Umständen notwendig
require 'mechanize'
agent = Mechanize.new

Jetzt ist Mechanize einsatzbereit, die folgenden Beispiele bauen darauf auf. Außerdem können mit dem agent nun noch grundlegende Einstellungen vorgenommen werden:

agent.set_proxy('localhost', '8000')
agent.user_agent = 'Individueller User-Agent'
agent.user_agent_alias = 'Linux Mozilla'

Die Einstellung ‘user_agent_alias‘ wählt einen User-Agent String aus dem folgenden Satz von Beispielen aus: Windows IE 6, Windows IE 7, Windows Mozilla, Mac Safari, Mac FireFox, Mac Mozilla, Linux Mozilla, Linux Konqueror, iPhone und Mechanize. Die Timing Einstellungen können ebenfalls sehr wichtig sein:

agent.open_timeout = 3 # setzt timeouts
agent.read_timeout = 4
agent.keep_alive = false # default ist true

Hier folgen nun einige Beispiele, vielleicht werde ich mit der Zeit auch noch ein paar ergänzen, falls jemand Vorschläge hat, immer her damit. Ich habe auf http://apoc.sixserv.org/requestinfo ein kleines Skript am laufen das nützliche Informationen zum HTTP-Request liefert, das kann zum Experimentieren mit Mechanize sehr nützlich sein. Einige Beispiele findet man auch in den GUIDE und EXAMPLES Dateien des Mechanize Pakets. Continue reading

ZDF Mediathek FAIL

Bisher habe ich das Öffentlich Rechtliche Projekt ZDF Mediathek nahezu täglich benutzt. ZDF Mediathek benutzte bis vor wenigen Tagen Windows Media Streams, welche sich wunderbar mit mplayerplug-in oder mit der URL des streams auch super mit mplayer etc anschauen ließen, doch damit ist nun Schluss – die ZDF Mediathek benutzt nun Flash Streaming. Ich kann diesen Schritt nicht nachvollziehen, Flash Videos unter Linux
machen einfach keinen Spaß. Vollbild oder das schauen während dem surfen sind somit Vergangenheit. Mit einem einfachem “mplayer -dumpstream -playlist URL” ließen sich hervorragend Aufnahmen machen, der Digitale Videorecorder quasi.

Ich befürchte das genau dies die verantwortlichen des ZDF dazu bewegt hat auf Flash Basiertes Streaming umzustellen. Ich erwarte von den Öffentlich Rechtlichen allerdings das, wenn Sie schon keine offenen Standards nutzen, die zumindest zumutbar nutzbar unter allen System laufen sollten. Im ZDF Forum wird auch heftig diskutiert – ich stehe nicht alleine mit der Meinung das Flash Streams schlichtweg SCHEISSE sind.

Die Möglichkeit Videos mit externen Playern zu schauen war für mich einer der Gründe mich überhaupt näher mit dem ZDF Programm auseinanderzusetzen. Neben “heute” und dem “Auslandsjournal” habe ich mir gelegentlich einige andere Sendungen/Dokumentationen angesehen – damit ist nun Schluss. Ich werde die ZDF Mediathek ab sofort boykottieren.
ZDF schließt so nicht nur Besitzer leistungsschwacher Rechner aus, sondern evtl auch welche die über ihre Set-top Boxen die ZDF Mediathek benutzten – und das obwohl sie damit die Kompatibilität angeblich steigern wollen.

Ich habe noch nie einen Fernseher besessen und dies ist für mich ein weiterer Schritt weg von diesem Medium. Die TV Sender scheinen es einfach nicht verstanden zu haben. Wahrscheinlich wird Sie in nicht allzu ferner Zeit das selbe Schicksal treffen wie die Musik-Industrie – die Netz-Generation wird sich ihren Medienkonsum selbst gestalten, mit oder ohne Segen der TV Sender. Die MI hat es wenigstens eingesehen und bietet in ihren Onlineshops
DRM-Freie MP3-Files an. Das Fernsehen von Morgen ist Interaktiv und besteht nur noch zu
geringen Teilen aus redaktionellen Inhalten und Programmplänen – die Mediathek war ein Schritt in die richtige Richtung, doch nun hat das ZDF wieder einen Schritt zurück gemacht.

@ZDF: Shame on you!

Das war wirklich die falsche Entscheidung!
Ein User weniger…

Nachtrag aus dem ZDF Forum:

“Wir wollen ein Format verwenden, das auf allen Browsern und Betriebssystemen abspielbar ist – deshalb Flash. übrigens sind die WMV/H.264-Streams noch abrufbar. Dafür hat jeder Videobeitrag einen eigenen RSS-Feed, in dem die Links auf die Videos enthalten sind.”

- Redaktion ZDFonline (link)
Das überarbeitete ZDF Online Angebot hat scheinbar nicht viele Freunde wie man den ZDF Foren entnehmen kann.

Es bleibt abzuwarten wie das ZDF bzw der Intendant etc reagieren…

Falls es mich dennoch nach Dokumentationen lüstet werde ich wie bisher
auch das ARTE-Angebot ARTE Plus7 benutzen.

Update:
apoc hat nen tolles Script zum Downloaden/Abspielen der WMV-Streams geschrieben. Diese sind ja NOCH im RSS-Feed zu beziehen. Danke an apoc (ich war zu faul mir da was zu scripten :D )

2 .Update:
Das ZDF reagiert scheinbar auf die Kritik:


haben Sie bitte noch etwas Geduld mit der Mediathek. In der nächsten Version läuft diese auch wieder ohne Flash. Daran, dass die Videos nicht bei allen in der gewohnten Qualität laufen, arbeiten wir gerade.

- Redaktion ZDFonline (link)

3. Update:
ZDF kündigt folgendes an:

Wir nehmen auch die Kritik an der Ladezeit der Seiten und an die Berichte über die Probleme mit dem Abspielen der Videos sehr ernst. Denn natürlich wollen wir schnell und einfach erreichbar sein. Ruckelnde Videos und “Stream not found”- Meldungen sind natürlich ärgerlich. Die Ursachen können aber sehr vielfältig sein. Wir arbeiten auf Hochtouren daran. Bei den technischen Fehlern merken Sie hoffentlich schon sehr bald eine Besserung. Bei den Entwicklungsprojekten dauert es in der Tat länger – wie einige User hier im Forum schon treffend angemerkt haben. Deshalb wird es eine Mediathek ohne Flash leider nicht vor Herbst geben können.

- Redaktion ZDFonline (link)

Warten bis Herbst aber immerhin…