Was sind die Unterschiede zwischen den das urllib, urllib2 und Anforderungen Modul?
In Python, was sind die Unterschiede zwischen den urllib
, urllib2
, und Anfragen
Modul? Warum sind es drei? Sie scheinen das gleiche zu tun...
Nicht zu werfen, eine andere Schraubenschlüssel in Ihre Pläne, aber wenn Sie sprechen über die Verwendung von Ihnen für den HTTP-Zugriff, dem empfehle ich code.google.com/p/httplib2 (httplib2) statt.
Anfragen ist der beste.
Ja, Aufträge nutzen. stackoverflow.com/questions/22676/...
Anfragen verwendet urllib3.. 3 ist eine größere Zahl
Ich fühle mich wie diese Frage sollte erweitert werden, so dass urllib3 jetzt.
Anfragen ist der beste.
Ja, Aufträge nutzen. stackoverflow.com/questions/22676/...
Anfragen verwendet urllib3.. 3 ist eine größere Zahl
Ich fühle mich wie diese Frage sollte erweitert werden, so dass urllib3 jetzt.
InformationsquelleAutor Paul Biggar | 2010-01-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, das wurde schon gesagt, aber ich würde empfehlen die Requests python-Paket:
http://docs.python-requests.org/en/latest/index.html
Wenn du bereits andere Sprachen als python, sind Sie wahrscheinlich denken, das urllib und urllib2 sind einfach zu bedienen, nicht viel code, und sehr fähig, das ist, wie ich verwendet, um zu denken. Aber die Anforderungen Paket ist so unglaublich nützlich und kurz sind, dass jeder nutzen sollte.
Erstens, es unterstützt eine vollständig restful API und ist so einfach wie:
Unabhängig davon, ob GET/POST die Sie nie haben zu Kodieren Parameter wieder, es dauert einfach ein Wörterbuch als argument und ist gut zu gehen.
Plus es hat sogar eine eingebaute json-decoder (wieder, ich weiß, json.Lasten (in) ist nicht viel mehr zu schreiben, aber das ist sicher bequem):
Oder wenn Ihre Antwort Daten ist nur text verwenden:
Dies ist nur die Spitze des Eisbergs. Dies ist die Liste der features aus den Anforderungen Website:
Sie sagen, das ist die beste Antwort. Aber es ist nicht wirklich die Frage beantworten. Ich kam hierher, um herauszufinden, über die Unterschiede zwischen das urllib und urllib2. Vor allem über die url-Codierung bietet. Die Antwort: Aufträge nutzen! 😉 Nur zu sagen, möchten Sie vielleicht klären die Frage. So wie es da steht, die Antwort von Crast tatsächlich eine Antwort auf die Frage perfekt.
urllib2 versucht weiter zu Abstrakt url-Anfragen mit der urllib2.Request Klasse, aber es fehlen ein paar nützliche utilities, die ist, warum es oft in Verbindung mit das urllib, und zur Beantwortung Ihrer konkreten Frage: es hat keine url-Codierung Funktionen, für die Parameter-Codierung, die Sie verwenden würden, das urllib.urlencode () für url-sichere string-Codierung, die Sie verwenden würden, das urllib.quote()/quote_plus(). Anfragen kümmert sich um alles für Sie: fügen Sie einfach die nicht - /un-sicher-strings, um die params-dict; das ist Teil der Grund, die meisten python-ers sagen, es ist eine bessere alternative.
Bei einigen anderen findet dieser im Jahr 2016, werden Sie wahrscheinlich wollen, zu schreiben
requests.post('http://www.mywebsite.com/user', data=userdata)
und nichtrequests.post('http://www.mywebsite.com/user', params=userdata)
ty @LGenzelis, ich fixe den bug! Ich kann nicht sehen, Wann genau die Veränderung eingetreten, aber mindestens bis 2015. Beispiel: docs.python-requests.org/en/latest/user/quickstart/... ; Docs: docs.python-requests.org/en/latest/user/quickstart/...
InformationsquelleAutor Hutch
urllib2 bietet einige zusätzliche Funktionen, nämlich die
urlopen()
Funktion können Sie festlegen Header (normalerweise würde man gehabt haben, um zu verwenden httplib in der Vergangenheit, die weit mehr verbose.) Wichtiger ist jedoch, urllib2 bietet dieRequest
Klasse, das ermöglicht einen eher deklarativen Ansatz zu tun, eine bitte:Beachten Sie, dass
urlencode()
ist nur in das urllib, nicht urllib2.Gibt es auch Prozeduren für die Implementierung von advanced URL-Unterstützung in urllib2. Die kurze Antwort ist, es sei denn Sie arbeiten mit legacy code, werden Sie wahrscheinlich wollen, verwenden Sie die URL-opener von urllib2, aber Sie müssen noch für den import in das urllib für einige der Funktionen des Dienstprogramms.
Bonus Antwort
Mit Google App Engine, die Sie verwenden können httplib, das urllib oder urllib2, aber alle von Ihnen sind nur Wrapper für die Google-URL Fetch API. Das heißt, Sie sind noch unterliegen, die gleichen Einschränkungen wie ports, Protokolle und die Länge der Reaktion erlaubt. Sie können den core-Bibliotheken, wie Sie erwarten, für das abrufen von HTTP-URLs, obwohl.
Wie in meinem obigen Beispiel, verwenden Sie
urlopen()
undRequest
von urllib2, und verwenden Sieurlencode()
aus das urllib. Keine wirklichen Schaden in der Benutzung beider Bibliotheken, so lange wie Sie sicherstellen, dass Sie verwenden die richtige urlopen. [Das urllib docs][1] klar, dass mit dieser ist acecepted Nutzung. [1]: docs.python.org/library/urllib2.html#urllib2.urlopenIch verwendete dieser gist für
urllib2.urlopen
; enthält andere Varianten zu.urllib2 nicht unterstützt, setzen oder löschen, das ist ein Schmerz
requests
auch erlauben, benutzerdefinierte Header: docs.python-requests.org/en/master/user/quickstart/...InformationsquelleAutor Crast
das urllib und urllib2 sind die beiden Python-Modulen, die URL-Anforderung-related stuff, bieten aber unterschiedliche Funktionen.
1) urllib2 akzeptieren kann ein Request-Objekt zum festlegen des headers für eine URL-Anforderung, das urllib akzeptiert nur einen URL.
2) das urllib bietet die urlencode Methode, die verwendet wird, für die Generierung von GET-query-strings, urllib2 nicht über eine solche Funktion. Dies ist einer der Gründe, warum das urllib wird oft verwendet, zusammen mit urllib2.
Anfragen - Anfragen, die' ist ein einfaches, einfach-zu-verwenden Sie HTTP Bibliothek, geschrieben in Python.
1) Python-Requests kodiert die Parameter automatisch, so dass Sie nur geben Sie Sie als einfache Argumente, anders als im Falle von das urllib, wo Sie brauchen, um verwenden Sie die Methode das urllib.encode() Kodierung der Parameter vor der übergabe.
2) Es wird automatisch dekodiert die Antwort in Unicode.
3) Anfragen, die hat auch viel bequemer Fehlerbehandlung.Wenn die Authentifizierung fehlgeschlagen ist, urllib2 wirft urllib2.URLError, während Anfragen zurückkehren würde, eine normale response-Objekt, wie erwartet. Alles, was Sie haben, um zu sehen, ob der Abruf erfolgreich war, die durch Boolesche Antwort.ok
Beispielsweise Referenz - https://dancallahan.info/journal/python-requests/
InformationsquelleAutor SrmHitter9062
urllib2.urlopen akzeptiert eine Instanz der Request-Klasse oder eine url, in der Erwägung, dass das urllib.urlopen akzeptiert nur einen url.
Eine ähnliche Diskussion fand hier statt:
http://www.velocityreviews.com/forums/t326690-urllib-urllib2-what-is-the-difference.html
InformationsquelleAutor Danny Roberts
Ich mag die
urllib.urlencode
Funktion, und es scheint nicht zu existieren inurllib2
.Ich denke nicht, das gilt für Python 3, können Sie das klären?
Wie ich oben erwähnt, ist diese Frage und die verschiedenen Antworten sollten aktualisiert werden, um klarzustellen, dass
urllib
in Python 3 ist noch eine weitere option, gesäubert, in verschiedener Weise. Aber zum Glück wird die offizielle Dokumentation auch fest, dass "Die Anträge-Paket wird empfohlen, für ein higher-level-HTTP-client-Schnittstelle." in 21.6. das urllib.Anfrage — Erweiterbare Bibliothek zum öffnen von URLs — Python 3.6.3 DokumentationInformationsquelleAutor Gattster
Einen erheblichen Unterschied ist, über das portieren von Python2 auf Python ist3. urllib2 existiert nicht für Python ist3 und seine Methoden portiert, um das urllib.
So sind Sie über, die stark und migrieren möchten, Python ist3 in der Zukunft, erwägen, das urllib.
Allerdings 2to3 tool wird automatisch die meiste Arbeit für Sie.
InformationsquelleAutor Arash
Nur um die bereits vorhandene Antworten, die ich nicht sehen, jemand zu erwähnen, dass python-requests ist nicht eine native Bibliothek. Wenn Sie ok mit dem hinzufügen von Abhängigkeiten, fordert dann ist das in Ordnung. Allerdings, wenn Sie versuchen, zu vermeiden, hinzufügen von Abhängigkeiten, das urllib ist eine native python-Bibliothek, die bereits zur Verfügung.
InformationsquelleAutor Zeitgeist
Sollte man generell verwenden, urllib2, da dies macht die Dinge ein bisschen einfacher manchmal durch die Annahme der Request-Objekte und auch das eine URLException auf Protokoll-Fehler. Mit Google App Engine, obwohl, können Sie nicht verwenden entweder. Verwenden Sie die URL Fetch API, dass Google in seiner Sandbox-Python-Umgebung.
Ah, muss neu sein. Mein code konnte ich endlich ausprobiert und musste umgeschrieben werden, um die Arbeit mit Holen...
devsite.googleplex.com/appengine/docs/python/urlfetch/...
InformationsquelleAutor Chinmay Kanchi
Ich den Inhalt einer url:
Es ist schwer zu schreiben Python2-und Python ist3 und
request
Abhängigkeiten code für die Antworten, weil Sieurlopen()
Funktionen undrequests.get()
Funktion zurück, andere Arten:urllib.request.urlopen()
gibt einehttp.client.HTTPResponse
urllib.urlopen(url)
gibt eininstance
request.get(url)
gibt einerequests.models.Response
InformationsquelleAutor alvas
Ein wichtiger Punkt, finde ich, fehlt in der obigen Antworten ist, dass das urllib gibt ein Objekt vom Typ
<class http.client.HTTPResponse>
in der Erwägung, dassrequests
zurück<class 'requests.models.Response'>
.Aufgrund dieser read () - Methode kann verwendet werden, mit
urllib
aber nicht mitrequests
.P. S. :
requests
wird schon reichen mit so viele Methoden, dass es kaum braucht man mehr alsread()
;>InformationsquelleAutor paradoxlover