1. Die einfachste Anwendung
import urllib2 url = r'http://www.baidu.com' html = urllib2.urlopen(url).read() print html
Der Client und der Server kommunizieren über Anfrage und Antwort. Der Client sendet zuerst eine Anfrage an den Server und empfängt dann die vom Server zurückgegebene Antwort
urllib2 stellt die Anforderungsklasse bereit, die es Benutzern ermöglicht, vor dem Senden einer Anforderung ein Anforderungsobjekt zu erstellen und die Anforderung dann über die Methode urllib2.urlopen zu senden
import urllib2 url = r'http://www.baidu.com' req = urllib2.Request(url) html = urllib2.urlopen(req).read() print html
Im obigen Beispiel verwenden Sie zuerst
req = urllib2.Request(url)
Instanziieren Sie ein Anforderungsobjekt und verwenden Sie dann
urllib2.urlopen(req)
um diese Seite zu öffnen.
Wir haben festgestellt, dass beim Instanziieren des Request-Objekts die URL festgelegt werden muss und es mehrere Standardparameter gibt
Daten und Header werden häufig auch in der Basis verwendet. Einige Websites, die zum Durchsuchen eine Anmeldung erfordern, erfordern häufig diese beiden Parameter
import urllib import urllib2 url = 'http://www.baidu.com/' values = {'name' : 'Michael Foord', 'location' : 'Northampton','language' : 'Python' } data = urllib.urlencode(values) req = urllib2.Request(url,data) response = urllib2.urlopen(req) the_page = response.read() print the_page
In diesem Beispiel werden einige Daten an Baidu gesendet. Dies ist normal, da wir beim Besuch von Baidu keine Informationen veröffentlichen müssen. Wenn wir diese jedoch veröffentlichen, tritt ein Fehler auf
Baidu meldet einen Fehler, wenn die entsprechende Webseite nicht gefunden werden kann.
Natürlich handelt es sich hierbei um POST-Daten. Sie können auch in der GET-Methode verwendet werden. Ändern Sie den obigen Code leicht
Baidu-Abfragen erfolgen über http://www.baidu.com/s?wd=XXX, daher müssen wir das Wörterbuch {'wd':'xxx' urlencodieren🎜>
#coding:utf-8 import urllib import urllib2 url = 'http://www.baidu.com/s' values = {'wd':'杨彦星'} data = urllib.urlencode(values) print data url2 = url+'?'+data response = urllib2.urlopen(url2) the_page = response.read() print the_page
import cookielib, urllib2 cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) r = opener.open("http://example.com/") #coding:utf-8 import urllib2,urllib import cookielib url = r'http://www.renren.com/ajaxLogin' #创建一个cj的cookie的容器 cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) #将要POST出去的数据进行编码 data = urllib.urlencode({"email":email,"password":pass}) r = opener.open(url,data) print cj
r = opener.open(url,data)
In ähnlicher Weise verfügt auch urllib2 über Proxy-bezogene Handles. Die Grundidee ist ähnlich.
#coding:utf-8 import urllib2,urllib import cookielib url = r'http://www.renren.com/ajaxLogin' #创建一个cj的cookie的容器 cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) urllib2.install_opener(opener) #将要POST出去的数据进行编码 data = urllib.urlencode({"email":email,"password":pass}) #r = opener.open(url,data)如果没有上面的urllib2.install_opener方法,就必须这样写了 r = urllib2.urlopen(url,data) html = urllib2.urlopen('http://www.renren.com/home').read() print html
URLError-Ausnahme wird ausgelöst, wenn urlopen() die Antwort nicht verarbeiten kann. Die HTTPError-Ausnahme ist eine Unterklasse von URLError und wird nur beim Zugriff auf eine URL vom Typ HTTP ausgelöst.
1. URLError-AusnahmeNormalerweise sind die Ursachen für URLError: keine Netzwerkverbindung (keine Route zum Zielserver) und der Zielserver, auf den zugegriffen wird, existiert nicht. In diesem Fall verfügt das Ausnahmeobjekt über ein Grundattribut (das ein Tupel aus (Fehlercode, Fehlergrund) ist).
#! /usr/bin/env python #coding=utf-8 import urllib2 url="http://www.baidu.com/" try: response=urllib2.urlopen(url) except urllib2.URLError,e: print e.reason
Instanzen von HTTPError-Ausnahmen verfügen über ein Codeattribut vom Typ Integer, das den vom Server zurückgegebenen Fehlerstatuscode darstellt.
Der Standardhandler des urllib2-Moduls kann Weiterleitungen verarbeiten (Statuscode liegt im Bereich 300), und Statuscodes im Bereich 100–299 zeigen Erfolg an. Daher ist der Statuscodebereich, der HTTPError-Ausnahmen verursachen kann, 400-599.
Wenn ein Fehler auftritt, gibt der Server einen HTTP-Fehlercode und eine Fehlerseite zurück. Sie können die HTTPError-Instanz als Rückgabeseite verwenden, was bedeutet, dass die HTTPError-Instanz nicht nur über das Code-Attribut verfügt, sondern auch über Methoden wie read, geturl und info.
#! /usr/bin/env python #coding=utf-8 import urllib2 url="http://cs.scu.edu.cn/~duanlei" try: response=urllib2.urlopen(url) except urllib2.HTTPError,e: print e.code print e.read()
#! /usr/bin/env python #coding=utf-8 import urllib2 url="xxxxxx" #需要访问的URL try: response=urllib2.urlopen(url) except urllib2.HTTPError,e: #HTTPError必须排在URLError的前面 print "The server couldn't fulfill the request" print "Error code:",e.code print "Return content:",e.read() except urllib2.URLError,e: print "Failed to reach the server" print "The reason:",e.reason else: #something you should do pass #其他异常的处理 #! /usr/bin/env python #coding=utf-8 import urllib2 url="http://xxx" #需要访问的URL try: response=urllib2.urlopen(url) except urllib2.URLError,e: if hasattr(e,"reason"): print "Failed to reach the server" print "The reason:",e.reason elif hasattr(e,"code"): print "The server couldn't fulfill the request" print "Error code:",e.code print "Return content:",e.read() else: pass #其他异常的处理