Snippet: Website mit Python abrufen und verarbeiten

Snippet: Website mit Python abrufen und verarbeiten

Python LogoMit Python lassen sich Web-Inhalte wie zum Beispiel Internetseiten abrufen um den Content auszulesen. Auf diese Weise können Websites auf Funktionstüchtigkeit oder bestimmte Events überwacht werden.

urllib

Für solche Aufgaben eignet sich in Python das Modul urllib. Damit lassen sich Ressourcen aus dem Internet/Netzwerk abrufen. urllib ist Teil der Python-Standard-Library, somit müssen keine zusätzlichen Pakete installiert werden.
Mit einem normalen Import lässt sich das Modul im laufenden Betrieb importieren:

import urllib

Um eine Seite aufzurufen könnt ihr urllib folgendermaßen nutzen:

response = urllib.urlopen('http://city-insider.de')

Der Request wurde an die URL http://city-insider.de gesendet. In der Variable response wird die Antwort gespeichert. Mit einer einfachen Schleife könnt ihr auf den Inhalt des HTML-Codes auf den Bildschirm ausgeben:

for line in response:
    print line

Um das ganze zu verdeutlichen habe ich ein kleines praktisches Beispiel vorbereitet: Problem: Ihr wollt den Titel (title-tag) einer Website automatisiert auslesen.
Lösung: Es wird eine Funktion benötigt.
Parameter: Seiten-URL
Return-Value: Title-Tag

import urllib
 
def website_title(url):
  response = urllib.urlopen(url)
  for l in response:
    if l.find('') >= 0:
      return l.strip()[line.find('')+7:l.find('')]
 
if __name__ == '__main__':
  print website_title('http://city-insider.de')

Dies ist ein sehr einfaches Beispiel, denn es wird angenommen das der title-tag genau so im HTML steht. Da im title-tag theoretisch unterschiedliche Schreibweisen möglich sind wird diese Funktion nicht pauschal bei jeder URL funktionieren. Ich denke jedoch zur groben Veranschaulichung der Thematik ist das Beispiel ausreichend.

mechanize

Eine weitere, etwas komfortablere, Möglichkeit Websites mit Python abzurufen ist das Modul mechanize. Mechanize ist nicht Teil der Standard-Library von Python. Allerdings ist mechanize Teil des Python-PackageIndey, daher kann das Paket über setuptools installiert werden. Wenn mechanize erfolgreich auf dem System installiert ist kann es, genau wie urllib, in Python verwendet werden.

Mechnize wird ähnlich verwendet wie urllib. Dazu muss es ebenso anfangs importiert werden:

import mechanize

Anschließend muss ein Browser im mechanize instanziert werden:

br= mechanize.Browser()

Eine Website kann dann über open() aufgerufen werden:

br.open('city-insider.de')

Auch mit Mechanize lässt sich die Website zeilenweise in der Konsole ausgeben:

response = br.open(url)
 for l in response.readlines():
   print l

Den Titel der Website könnte man nun genauso auslesen wie in urllib. Allerdings hat mechanize hierfür bereits eine eigende Methode an Bord die uns das abnimmt:

import mechanize
 
def website_title2(url):
  br = mechanize.Browser()
  br.open(url)
  return br.title()
 
if __name__ == '__main__':
  print website_title2('http://city-insider.de')

Das Ergebnis bei beiden Funktionen ist das gleiche. Die mechanize Variante ist vermutlich wesentlich Härter, da sie unabhängig der Schreibweise eines title-tags funktionieren wird. Der Aufwand für den Entwickler ist geringer, da man das Ergebnis nicht aufwendig parsen muss. In mechanize gibt es weiterhin Möglichkeiten Formulare zu füllen und abzusenden, es können außerdem Links geklickt werden. Theoretisch lassen sich komfortabel ganze Klickstrecken einer Website skripten. Zu den weiteren Funktionen in mechanize würde ich einen weiteren Artikel verfassen um dort etwas ins Detail zu gehen. Für einen ersten Überblick sollte es an dieser Stelle reichen.