Unter der Haube, verwendet requests
urllib3
, um die meisten http Schwerlast zu tun. Bei richtiger Verwendung sollte es größtenteils identisch sein, es sei denn, Sie benötigen eine erweiterte Konfiguration.
Außer in Ihrem speziellen Beispiel sie nicht die gleichen sind:
Im urllib3 Beispiel Sie erneut mit Verbindungen während in der Anfragen Beispiel sind Sie keine Verbindungen wiederverwenden. Hier ist, wie Sie sagen können:
>>> import requests
>>> requests.packages.urllib3.add_stderr_logger()
2016-04-29 11:43:42,086 DEBUG Added a stderr logging handler to logger: requests.packages.urllib3
>>> requests.get('https://www.google.com/')
2016-04-29 11:45:59,043 INFO Starting new HTTPS connection (1): www.google.com
2016-04-29 11:45:59,158 DEBUG "GET/HTTP/1.1" 200 None
>>> requests.get('https://www.google.com/')
2016-04-29 11:45:59,815 INFO Starting new HTTPS connection (1): www.google.com
2016-04-29 11:45:59,925 DEBUG "GET/HTTP/1.1" 200 None
Um die Wiederverwendung von Verbindungen wie in einem urllib3 Poolmanager zu starten, müssen Sie Sitzung ein Anträge stellen.
>>> session = requests.session()
>>> session.get('https://www.google.com/')
2016-04-29 11:46:49,649 INFO Starting new HTTPS connection (1): www.google.com
2016-04-29 11:46:49,771 DEBUG "GET/HTTP/1.1" 200 None
>>> session.get('https://www.google.com/')
2016-04-29 11:46:50,548 DEBUG "GET/HTTP/1.1" 200 None
Jetzt es entspricht dem, was man mit http = PoolManager()
taten. Eine weitere Anmerkung: urllib3 ist eine explizitere Bibliothek der unteren Ebene. Daher erstellen Sie explizit einen Pool, und Sie müssen beispielsweise explizit your SSL certificate location angeben. Es ist eine zusätzliche Zeile oder zwei von mehr Arbeit, aber auch ein bisschen mehr Kontrolle, wenn das, was Sie suchen.
Alle gesagt und getan ist, wird der Vergleich:
1) Unter Verwendung urllib3:
import urllib3, certifi
http = urllib3.PoolManager(ca_certs=certifi.where())
html = http.request('GET', url).read()
soup = BeautifulSoup(html, "html5lib")
2) Verwenden von Anfragen:
import requests
session = requests.session()
html = session.get(url).content
soup = BeautifulSoup(html, "html5lib")
Die 'requests' Modul verwendet (und [packages/vendorizes 'urllib3'] (https://github.com/kennethreitz/requests/tree/master/requests/packages)) unter der Haube - aber Es bietet eine etwas höhere Ebene und eine einfachere API darüber. –
Abgesehen davon, dass Anfragen eine API höherer Ebene, wahrscheinlich mit etwas weniger Code, bieten, gibt es Situationen, in denen es besser wäre, sich für das eine oder andere zu entscheiden? Oder ist es generell eine bessere Option, ganz auf "Anfragen" zu setzen? –
Ich empfehle immer "Anfragen" zu verwenden. Es macht HTTP einfach sehr angenehm zu handhaben, und wenn es etwas gibt, was man mit "Anfragen" nicht machen kann, das kann man mit "urllib3", bin ich noch nicht darauf gestoßen. Aber das ist nur [meine Meinung] (http://stackoverflow.com/help/dont-ask). –