1047 Stimmen

Was sind die Unterschiede zwischen den Modulen urllib, urllib2, urllib3 und requests?

Was sind in Python die Unterschiede zwischen dem urllib , urllib2 , urllib3 y requests Module? Warum sind es drei? Sie scheinen das Gleiche zu tun...

25 Stimmen

Diese Frage sollte aktualisiert werden, um klarzustellen, dass urllib in Python 3 ist eine weitere Option, die auf verschiedene Weise bereinigt wurde. Aber glücklicherweise weist die offizielle Dokumentation auch darauf hin, dass " Das Paket Requests wird für eine übergeordnete HTTP-Client-Schnittstelle empfohlen. " unter 21.6. urllib.request - Erweiterbare Bibliothek zum Öffnen von URLs - Python 3.6.3 Dokumentation

20 Stimmen

Leider habe ich keine Antworten gefunden, die mir sagen, was ich tun soll. urllib3 ist und wie urllib3 unterscheidet sich von der offiziellen urllib Modul.

3 Stimmen

Wahrscheinlich erwähnenswert httpx - die neuere requests-backwords-kompatible async-Bibliothek.

16voto

Arash Punkte 531

Ein wesentlicher Unterschied besteht in der Portierung von Python2 auf Python3. urllib2 existiert nicht für Python3 und seine Methoden wurden auf urllib portiert. Wenn Sie also Python2 intensiv nutzen und in Zukunft auf Python3 migrieren wollen, sollten Sie urllib verwenden. Das 2to3-Tool wird jedoch den größten Teil der Arbeit automatisch für Sie erledigen.

16voto

Ransaka Ravihara Punkte 1431

Ich denke, alle Antworten sind ziemlich gut. Aber weniger Details über urllib3.urllib3 ist ein sehr mächtiger HTTP-Client für Python. Für die Installation werden beide der folgenden Befehle funktionieren,

urllib3

mit pip,

pip install urllib3

oder Sie können den neuesten Code von Github erhalten und ihn mit installieren,

$ git clone git://github.com/urllib3/urllib3.git
$ cd urllib3
$ python setup.py install

Dann sind Sie startklar,

Importieren Sie einfach urllib3 mit,

import urllib3

Anstatt direkt eine Verbindung zu erstellen, benötigen Sie hier eine PoolManager-Instanz, um Anfragen zu stellen. Diese kümmert sich um das Pooling von Verbindungen und um die Thread-Sicherheit für Sie. Außerdem gibt es ein ProxyManager-Objekt für die Weiterleitung von Anfragen über einen HTTP/HTTPS-Proxy Hier können Sie sich auf die Dokumentation beziehen. Beispielverwendung :

>>> from urllib3 import PoolManager
>>> manager = PoolManager(10)
>>> r = manager.request('GET', 'http://google.com/')
>>> r.headers['server']
'gws'
>>> r = manager.request('GET', 'http://yahoo.com/')
>>> r.headers['server']
'YTS/1.20.0'
>>> r = manager.request('POST', 'http://google.com/mail')
>>> r = manager.request('HEAD', 'http://google.com/calendar')
>>> len(manager.pools)
2
>>> conn = manager.connection_from_host('google.com')
>>> conn.num_requests
3

Wie bereits in urrlib3 Dokumentationen, urllib3 bietet viele wichtige Funktionen, die in den Python-Standardbibliotheken fehlen.

  • Gewindesicherheit.
  • Pooling von Verbindungen.
  • Client-seitige SSL/TLS-Verifizierung.
  • Datei-Uploads mit Multipart-Kodierung.
  • Hilfsprogramme für die Wiederholung von Anfragen und den Umgang mit HTTP-Umleitungen.
  • Unterstützung für gzip- und deflate-Kodierung.
  • Proxy-Unterstützung für HTTP und SOCKS.
  • 100%ige Testabdeckung.

Weitere Einzelheiten finden Sie im Benutzerhandbuch.

requests

Anfragen verwendet urllib3 unter der Haube und machen es noch einfacher, die requests und Daten abrufen. Zum einen ist keep-alive 100% automatisch, im Vergleich zu urllib3 wo das nicht der Fall ist. Es hat auch Ereignis-Hooks, die eine Callback-Funktion aufrufen, wenn ein Ereignis ausgelöst wird, wie z.B. der Empfang einer Antwort In requests hat jede Anforderungsart ihre eigene Funktion. Anstatt also eine Verbindung oder einen Pool zu erstellen, erhalten Sie direkt eine URL.


Für die Installation requests mit pip einfach ausführen

pip install requests

oder Sie können einfach aus dem Quellcode installieren,

$ git clone git://github.com/psf/requests.git
$ cd requests
$ python setup.py install

Dann, import requests

Hier können Sie die offizielle Dokumentation , Für einige fortgeschrittene Verwendungszwecke wie Sitzungsobjekt, SSL-Verifizierung und Event Hooks lesen Sie bitte hier nach url .

5 Stimmen

Ich danke Ihnen für diese Antwort. Ich kam hierher, weil ich gesehen hatte urllib3 und wusste nicht, ob ich es benutzen sollte oder requests . Jetzt fühle ich mich informiert, wie ich diese Entscheidung in Zukunft treffen kann. Die akzeptierte Antwort enthält eine schöne Aufschlüsselung von requests aber sie unterscheidet sich nicht von den Alternativen.

4 Stimmen

Ja, auch ich kam hierher, um nach den Unterschieden zwischen Requests, urllib, urllib2 und urllib3 zu suchen und war mit der akzeptierten Antwort unzufrieden. Diese Klarstellung sollte hinzugefügt oder zumindest mit der akzeptierten Antwort verknüpft werden. Ich danke Ihnen.

2 Stimmen

Wenn Sie von einem Firmen-Proxy geplagt werden, sollten Sie wissen, dass das requests-Modul die Umgebungsvariablen http_proxy, https_proxy, no_proxy munter akzeptiert. Das urllib3-Modul ignoriert Umgebungsvariablen; um Ihre Abfragen über einen Proxy zu senden, müssen Sie eine Instanz von ProxyManager anstelle von PoolManager erstellen.

12voto

Gattster Punkte 4413

Ich mag die urllib.urlencode Funktion, und sie scheint nicht zu existieren in urllib2 .

>>> urllib.urlencode({'abc':'d f', 'def': '-!2'})
'abc=d+f&def=-%212'

6 Stimmen

Nur ein Hinweis: Seien Sie vorsichtig mit urlencode, da es <unicode>-Objekte nicht direkt verarbeiten kann - Sie müssen sie kodieren, bevor Sie sie an urlencode senden (u'blá'.encode('utf-8'), oder was auch immer).

0 Stimmen

@user18015: Ich glaube nicht, dass dies auf Python 3 zutrifft, können Sie das klären?

2 Stimmen

Wie ich bereits erwähnt habe, sollten diese Frage und die verschiedenen Antworten aktualisiert werden, um klarzustellen, dass urllib in Python 3 ist eine weitere Option, die auf verschiedene Weise bereinigt wurde. Aber glücklicherweise weist die offizielle Dokumentation auch darauf hin, dass " Das Paket Requests wird für eine übergeordnete HTTP-Client-Schnittstelle empfohlen. " unter 21.6. urllib.request - Erweiterbare Bibliothek zum Öffnen von URLs - Python 3.6.3 Dokumentation

10voto

alvas Punkte 104216

Um den Inhalt einer Url zu erhalten:

try: # Try importing requests first.
    import requests
except ImportError: 
    try: # Try importing Python3 urllib
        import urllib.request
    except AttributeError: # Now importing Python2 urllib
        import urllib

def get_content(url):
    try:  # Using requests.
        return requests.get(url).content # Returns requests.models.Response.
    except NameError:  
        try: # Using Python3 urllib.
            with urllib.request.urlopen(index_url) as response:
                return response.read() # Returns http.client.HTTPResponse.
        except AttributeError: # Using Python3 urllib.
            return urllib.urlopen(url).read() # Returns an instance.

Es ist schwer, Python2 und Python3 zu schreiben und request Abhängigkeitscode für die Antworten, weil sie urlopen() Funktionen und requests.get() Funktion geben unterschiedliche Typen zurück:

  • Python2 urllib.request.urlopen() gibt eine http.client.HTTPResponse
  • Python3 urllib.urlopen(url) gibt eine instance
  • Anfrage request.get(url) gibt eine requests.models.Response

6voto

Chinmay Kanchi Punkte 58341

Im Allgemeinen sollten Sie urllib2 verwenden, da dies die Dinge manchmal etwas einfacher macht, indem es Request-Objekte akzeptiert und außerdem bei Protokollfehlern eine URLException auslöst. Bei Google App Engine können Sie jedoch beides nicht verwenden. Sie müssen die URL-Abruf-API die Google in seiner Sandbox-Python-Umgebung bereitstellt.

2 Stimmen

Was Sie über appengine gesagt haben, ist nicht ganz richtig. Sie können tatsächlich httplib, urllib und urllib2 in App-Engine jetzt verwenden (sie sind Wrapper für url fetch, getan, so dass mehr Code mit App-Engine kompatibel sein würde).

0 Stimmen

Ah, muss neu sein. Mein Code ist beim letzten Versuch gescheitert und musste umgeschrieben werden, damit er mit fetch funktioniert...

0 Stimmen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X