Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by haas.homelinux.net...

Inhaltsverzeichnis
1 Einleitung
2 Überblick über Python
3 Die Arbeit mit Python
4 Der interaktive Modus
5 Grundlegendes zu Python-Programmen
6 Kontrollstrukturen
7 Das Laufzeitmodell
8 Basisdatentypen
9 Benutzerinteraktion und Dateizugriff
10 Funktionen
11 Modularisierung
12 Objektorientierung
13 Weitere Spracheigenschaften
14 Mathematik
15 Strings
16 Datum und Zeit
17 Schnittstelle zum Betriebssystem
18 Parallele Programmierung
19 Datenspeicherung
20 Netzwerkkommunikation
21 Debugging
22 Distribution von Python-Projekten
23 Optimierung
24 Grafische Benutzeroberflächen
25 Python als serverseitige Programmiersprache im WWW mit Django
26 Anbindung an andere Programmiersprachen
27 Insiderwissen
28 Zukunft von Python
A Anhang
Stichwort

Download:
- ZIP, ca. 4,8 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Python von Peter Kaiser, Johannes Ernesti
Das umfassende Handbuch - Aktuell zu Python 2.5
Buch: Python

Python
gebunden, mit CD
819 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1110-9
Pfeil 20 Netzwerkkommunikation
  Pfeil 20.1 Socket API
    Pfeil 20.1.1 Client/Server-Systeme
    Pfeil 20.1.2 UDP
    Pfeil 20.1.3 TCP
    Pfeil 20.1.4 Blockierende und nicht-blockierende Sockets
    Pfeil 20.1.5 Verwendung des Moduls
    Pfeil 20.1.6 Netzwerk-Byte-Order
    Pfeil 20.1.7 Multiplexende Server – select
    Pfeil 20.1.8 SocketServer
  Pfeil 20.2 Zugriff auf Ressourcen im Internet – urllib
    Pfeil 20.2.1 Verwendung des Moduls
  Pfeil 20.3 Einlesen einer URL – urlparse
  Pfeil 20.4 FTP – ftplib
  Pfeil 20.5 E-Mail
    Pfeil 20.5.1 SMTP – smtplib
    Pfeil 20.5.2 POP3 – poplib
    Pfeil 20.5.3 IMAP4 – imaplib
    Pfeil 20.5.4 Erstellen komplexer E-Mails – email
  Pfeil 20.6 Telnet – telnetlib
  Pfeil 20.7 XML-RPC
    Pfeil 20.7.1 Der Server
    Pfeil 20.7.2 Der Client
    Pfeil 20.7.3 Multicall
    Pfeil 20.7.4 Einschränkungen


Galileo Computing - Zum Seitenanfang

20.2 Zugriff auf Ressourcen im Internet – urllib  Zur nächsten ÜberschriftZur vorigen Überschrift

Das Modul urllib bietet eine komfortable Schnittstelle, um auf Dateien im Internet zuzugreifen. Die zentrale Funktion dieser Bibliothek ist urlopen, die der Funktion open ähnelt, bis auf die Tatsache, dass statt eines Dateinamens eine URL übergeben wird. Außerdem können auf dem resultierenden Dateiobjekt aus naheliegendem Grunde keine Schreiboperationen durchgeführt werden.


Galileo Computing - Zum Seitenanfang

20.2.1 Verwendung des Moduls  topZur vorigen Überschrift

Im Folgenden sollen die wichtigsten im Modul urllib enthaltenen Funktionen detailliert besprochen werden.

urllib.urlopen(url[, data[, proxies]])

Die Funktion urlopen greift auf die durch URL adressierte Netzwerkressource zu und gibt ein geöffnetes Dateiobjekt auf dieser Ressource zurück. Damit ermöglicht die Funktion es beispielsweise, den Quelltext einer Website herunterzuladen und wie eine lokale Datei einzulesen.

Wenn bei der URL kein Protokoll wie beispielsweise http:// oder ftp:// angegeben wurde, wird angenommen, dass die URL auf eine Ressource der lokalen Festplatte verweist. Für Zugriffe auf die lokale Festplatte kann das Protokoll file:// angegeben werden.

Wenn kein Zugriff auf die Ressource erlangt werden kann, weil die Ressource beispielsweise nicht existiert oder der entsprechende Server nicht erreichbar ist, wird eine IOError-Exception geworfen.

Das von der Funktion urlopen zurückgegebene Dateiobjekt ist ein dateiähnliches Objekt (engl. file-like object), da es nur eine Untermenge der Funktionalität eines echten Dateiobjekts bereitstellt. Die folgende Tabelle zeigt die verfügbaren Methoden des zurückgegebenen dateiähnlichen Objekts mit einer kurzen Beschreibung.


Tabelle 20.3  Methoden des datei-ähnlichen Objekts
Methode Beschreibung

read([size])

Liest size Byte aus der Ressource aus. Wenn size nicht angegeben wurde, wird der komplette Inhalt ausgelesen.

Die gelesenen Daten werden als String zurückgegeben.

readline([size])

Liest eine Zeile aus der Ressource aus. Wenn size angegeben wurde, werden maximal size Byte gelesen.

Die gelesenen Daten werden als String zurückgegeben.

readlines([sizehint])

Liest alle Zeilen der Ressource aus und gibt diese in Form einer Liste von Strings zurück. Wenn sizehint angegeben wurde, wird nur so lange gelesen, bis ungefähr sizehint Bytes gelesen wurden.

fileno()

Gibt den Dateideskriptor der geöffneten Ressource als ganze Zahl zurück.

close()

Schließt das geöffnete Objekt. Nach Aufruf dieser Methode sind keine weiteren Operationen mehr möglich.

info()

Gibt ein dictionary-ähnliches Objekt zurück, das Metainformationen der heruntergeladenen Seite enthält.

Im Anschluss an diese Tabelle werden wir uns eingehend mit der von info zurückgegebenen Instanz beschäftigen.

geturl()

Gibt einen String mit der URL der Ressource zurück.


Die Methode info des datei-ähnlichen Objekts stellt eine Instanz bereit, die verschiedene Informationen über die Netzwerkressource enthält. Auf diese Informationen kann wie bei einem Dictionary zugegriffen werden, weswegen die von info zurückgegebene Instanz auch dictionary-ähnliches Objekt genannt wird. Dazu folgendes Beispiel: [In diesem Zusammenhang bedeutet »ungefähr«, dass die Anzahl der zu lesenden Bytes möglicherweise zu einer internen Puffergröße aufgerundet wird. ]

>>> f = urllib.urlopen("http://www.galileo-press.de") 
>>> d = f.info() 
<httplib.HTTPMessage instance at 0x8106c8c> 
>>> d.keys() 
['content-length', 'expires', 'server', 'connection', 
'cache-control', 'date', 'content-type']

Im Beispiel wurde auf die Internetressource http://www.galileo-press.de zugegriffen und durch Aufruf der Methode info das dictionary-ähnliche Objekt erzeugt, das Informationen zu der Website enthält. Durch die Methode keys eines Dictionarys lassen sich alle enthaltenen Schlüssel anzeigen. Welche Informationen enthalten sind, hängt vom verwendeten Protokoll ab. Beim HTTP-Protokoll enthält das dictionary-ähnliche Objekt alle vom Server gesendeten Informationen. So können beispielsweise über die Schlüssel "content-length" und "server" die Größe der heruntergeladenen Datei in Byte bzw. der Identifikationsstring der Serversoftware ausgelesen werden:

>>> d["content-length"] 
'26180' 
>>> d["server"] 
'Zope/(Zope 2.7.6-final, python 2.3.5, linux2) ZServer/1.1'

Beachten Sie, dass es sich bei dem in diesem Fall verwendeten Server Zope um einen Webserver für Python handelt.

Außerdem unterstützen Instanzen des datei-ähnlichen Objekts das Iteratorkonzept. Das heißt, dass sich urlopen folgendermaßen verwenden lässt:

f = urllib.urlopen("http://www.galileo-press.de") 
for zeile in f: 
    print zeile 
f.close()

Dieser Beispielcode würde zeilenweise über den Quelltext von www.galileo-press.de iterieren und in jedem Iterationsschritt die aktuelle Zeile auf dem Bildschirm ausgeben.

Wenn das verwendete Protokoll http ist, kann der optionale Parameter data dazu verwendet werden, POST-Parameter an die Ressource zu übermitteln. Für den Parameter data müssen diese POST-Werte speziell aufbereitet werden. Dazu wird die Funktion urlencode verwendet:

>>> prm = urllib.urlencode({"prm1" : "wert1", "prm2" : "wert2"}) 
>>> f = urllib.urlopen("http://www.beispiel.de", prm)

Beachten Sie, dass neben POST eine weitere Methode zur Parameterübergabe an eine Website namens GET existiert. Bei GET werden die Parameter direkt in die URL geschrieben:

>>> f = urllib.urlopen("http://www.beispiel.de?prm1=wert1")

Wenn in Ihrem System für bestimmte Protokolle ein Proxy eingestellt ist, beispielsweise über eine Umgebungsvariable oder die Systemkonfiguration, wird diese Einstellung von urlopen respektiert und der Proxy verwendet. Es ist aber auch möglich, durch Angabe des dritten Parameters, proxies, die zu verwendenden Proxys direkt anzugeben. Hier muss ein Dictionary übergeben werden, das die Protokolle als Schlüssel und die Adresse des jeweiligen Proxys als Wert enthält. Ein Aufruf von urlopen unter Verwendung eines Proxys für HTTP- und FTP-Verbindungen sieht folgendermaßen aus:

>>> proxies = { 
...     "http" : "http://www.proxy.de:8081", 
...     "ftp" : "http://www.proxy.de:21" 
...     } 
>>> f = urllib.urlopen("http://www.google.de", None, proxies)
urllib.urlretrieve(url[, filename[, reporthook[, data]]])

Macht den Inhalt der Ressource, auf die die URL url verweist, unter einem lokalen Dateinamen verfügbar. Dazu wird der Inhalt der Ressource heruntergeladen oder kopiert, sofern dies notwendig ist. Wenn sich die Ressource bereits auf der lokalen Festplatte befindet, wird sie nicht kopiert. Die Funktion urlretrieve gibt ein Tupel mit zwei Elementen zurück: dem Dateinamen der lokalen Datei und dem Rückgabewert der info-Methode des datei-ähnlichen Objekts:

>>> urllib.urlretrieve("http://www.galileo-press.de") 
('/tmp/tmpHqjxaL', <httplib.HTTPMessage instance at 0xb78d36ec>)

Durch Angabe eines Dateinamens als zweiten Parameter kann festgelegt werden, wohin die heruntergeladene Ressource kopiert werden soll. Wenn dieser Parameter angegeben wurde, werden auch lokale Ressourcen kopiert. Normalerweise werden heruntergeladene Ressourcen als temporäre Dateien im entsprechenden Verzeichnis des Betriebssystems gespeichert.

Als dritter Parameter kann ein Funktionsobjekt übergeben werden. Diese Funktion wird aus urlretrieve heraus einmal aufgerufen, wenn die Verbindung zur Netzwerkressource hergestellt wurde, und dann öfter, wenn ein Block der Ressource heruntergeladen wurde. Der Callback-Funktion werden drei Parameter übergeben: die Anzahl der bisher übertragenen Blöcke, die Größe eines Blocks in Byte und die Gesamtgröße der Ressource in Byte. Mithilfe dieses dritten Parameters lässt sich also eine Statusanzeige des Downloads realisieren:

>>> def f(blocks, blocksize, size): 
...     print "Status: %d%%" % (blocksize*blocks*100/size) 
... 
>>> url = "http://www.galileo-press.de" 
>>> res = urllib.urlretrieve(url, "datei.html", f) 
Status: 0% 
Status: 29% 
Status: 58% 
Status: 87% 
Status: 116% 
>>> res 
('datei.html', <httplib.HTTPMessage instance at 0xb78d39ac>)

Dass die Statusanzeige 116 % anzeigt, liegt daran, dass das letzte Paket nicht die volle Größe hat.

Der vierte Parameter, data, entspricht dem Parameter data der Funktion urlopen und wird auch so verwendet.

urllib.quote(string[, safe])

Ersetzt Sonderzeichen, die in einer URL nicht als solche vorkommen dürfen, durch Escape-Sequenzen der Form %xx, wie sie in URLs verwendet werden dürfen. Durch den optionalen Parameter safe, einen String, können Zeichen angegeben werden, die nicht in eine Escape-Sequenz umgewandelt werden sollen.

>>> urllib.quote("www.test.de/hallo welt.html") 
'www.test.de/hallo%20welt.html'
urllib.unquote(string)

Die Funktion unquote ist das Gegenstück von quote. Escape-Sequenzen der Form %xx im String string werden durch das Sonderzeichen ersetzt, und der resultierende String wird zurückgegeben.

>>> urllib.unquote("www.test.de/hallo%20welt.html") 
'www.test.de/hallo welt.html'
urllib.urlencode(query[, doseq])

Erzeugt aus den Schlüssel/Wert-Paaren des Dictionarys query einen String des folgenden Formats:

>>> urllib.urlencode({"abc" : 1, "def" : "ghi"}) 
'abc=1&def=ghi'

Ein solcher String enthält Parameter, die per POST oder GET an ein serverseitiges Script übergeben werden können. Der Rückgabewert der Funktion urlencode kann als Parameter data der Funktionen urlopen und urlretrieve übergeben werden.

Wenn das übergebene Dictionary Sequenzen als Werte enthält und der optionale Parameter doseq True ist, werden diese Sequenzen zu eigenen Schlüssel/Wert-Paaren aufgebrochen. Dabei wird als Parametername der Schlüssel der jeweiligen Sequenz im Dictionary verwendet:

>>> urllib.urlencode({"abc" : [1,2,3], "def" : "ghi"}, True) 
'abc=1&abc=2&abc=3&def=ghi' 
>>> urllib.urlencode({"abc" : [1,2,3], "def" : "ghi"}, False) 
'abc=%5B1%2C+2%2C+3%5D&def=ghi'

Wenn für doseq False übergeben wird, werden eventuell vorhandene Sequenzen als Text in den Parameterstring eingetragen.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Python






Python
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux






 Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Praxisbuch Web 2.0






 Praxisbuch Web 2.0


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Praxisbuch Objektorientierung






 Praxisbuch Objektorientierung


Zum Katalog: Einstieg in SQL






 Einstieg in SQL


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo