Вопрос-Ответ

What are the differences between the urllib, urllib2, urllib3 and requests module?

В чем различия между urllib, urllib2, urllib3 и модулем запросов?

В Python в чем разница между модулями urllib, urllib2, urllib3 и requests.? Почему их три? Кажется, они делают одно и то же...

Переведено автоматически
Ответ 1

Я знаю, что это уже было сказано, но я бы настоятельно рекомендовал requests пакет Python.

Если вы использовали языки, отличные от python, вы, вероятно, думаете, что urllib и urllib2 просты в использовании, не содержат большого количества кода и обладают высокими возможностями, именно так я привык думать. Но requests пакет настолько невероятно полезен и короток, что им должен пользоваться каждый.

Во-первых, он поддерживает полностью restful API и так же прост, как:

import requests

resp = requests.get('http://www.mywebsite.com/user')
resp = requests.post('http://www.mywebsite.com/user')
resp = requests.put('http://www.mywebsite.com/user/put')
resp = requests.delete('http://www.mywebsite.com/user/delete')

Независимо от того, используется ли GET / POST , вам никогда не придется снова кодировать параметры, он просто принимает словарь в качестве аргумента и готов к работе:

userdata = {"firstname": "John", "lastname": "Doe", "password": "jdoe123"}
resp = requests.post('http://www.mywebsite.com/user', data=userdata)

Плюс у него даже есть встроенный декодер JSON (опять же, я знаю, что json.loads() не намного больше писать, но это, безусловно, удобно):

resp.json()

Или, если данные вашего ответа представляют собой просто текст, используйте:

resp.text

Это только верхушка айсберга. Это список функций с сайта requests:


  • Международные домены и URL

  • Поддержка и пул подключений

  • Сеансы с сохранением файлов cookie

  • Проверка SSL в браузере

  • Базовая / дайджест-аутентификация

  • Элегантные файлы cookie с ключом / значением

  • Автоматическая распаковка

  • Тела ответов в Юникоде

  • Загрузка файлов из нескольких частей

  • Время ожидания подключения

  • .поддержка netrc

  • Элемент списка

  • Python 2.7, 3.6—3.9

  • Потокобезопасен.

Ответ 2

В стандартной библиотеке Python 2 были две HTTP-библиотеки, которые существовали параллельно. Несмотря на схожее название, они не были связаны: у них был другой дизайн и другая реализация.


  • urllib был оригинальным HTTP-клиентом Python, добавленным в стандартную библиотеку в Python 1.2. Более раннюю документацию для urllib можно найти в Python 1.4.



  • urllib2 был ли более мощный HTTP-клиент, добавленный в Python 1.6, предназначен для замены urllib:



    urllib2 - новая и улучшенная, но несовместимая версия urllib (все еще экспериментальная).



    Более раннюю документацию для urllib2 можно найти в Python 2.1.



Стандартная библиотека Python 3 имеет новую urllib, которая представляет собой объединенную / переработанную / переписанную версию старых модулей.

urllib3 это пакет стороннего производителя (т.Е. Не входит в стандартную библиотеку CPython). Несмотря на название, оно не имеет отношения к пакетам стандартных библиотек, и нет намерения включать его в стандартную библиотеку в будущем.

Наконец, requests используется внутри urllib3, но нацелен на более простой в использовании API.

Ответ 3

urllib2 предоставляет некоторые дополнительные функциональные возможности, а именно urlopen() функция может позволить вам указывать заголовки (обычно в прошлом вам приходилось использовать httplib, который был гораздо более подробным.) Что еще более важно, urllib2 предоставляет класс Request, который допускает более декларативный подход к выполнению запроса:

r = Request(url='http://www.mysite.com')
r.add_header('User-Agent', 'awesome fetcher')
r.add_data(urllib.urlencode({'foo': 'bar'})
response = urlopen(r)

Обратите внимание, что urlencode() находится только в urllib, а не в urllib2.

В urllib2 также есть обработчики для реализации более расширенной поддержки URL. Короткий ответ таков: если вы не работаете с устаревшим кодом, вы, вероятно, захотите использовать средство открывания URL из urllib2, но вам все равно нужно импортировать в urllib некоторые служебные функции.

Бонусный ответ В Google App Engine вы можете использовать любой из httplib, urllib или urllib2, но все они являются просто оболочками для Google URL Fetch API. То есть на вас по-прежнему распространяются те же ограничения, такие как порты, протоколы и разрешенная длина ответа. Однако вы можете использовать ядро библиотек, как и следовало ожидать, для получения URL-адресов HTTP.

Ответ 4

urllib и urllib2 - это модули Python, которые выполняют запросы URL, но предлагают разные функциональные возможности.

1) urllib2 может принимать объект Request для установки заголовков для запроса URL, urllib принимает только URL.

2) urllib предоставляет метод urlencode, который используется для генерации строк запроса GET, urllib2 такой функции не имеет. Это одна из причин, почему urllib часто используется вместе с urllib2.

Запросы - Requests’ - это простая в использовании HTTP-библиотека, написанная на Python.

1) Python Requests кодирует параметры автоматически, поэтому вы просто передаете их как простые аргументы, в отличие от случая urllib, где вам нужно использовать метод urllib.encode() для кодирования параметров перед их передачей.

2) Он автоматически декодирует ответ в Unicode.

3) В Requests также реализована гораздо более удобная обработка ошибок.Если ваша аутентификация не удалась, urllib2 вызовет urllib2.URLError , в то время как Requests вернет обычный объект response, как и ожидалось. Все, что вам нужно, чтобы увидеть, был ли запрос успешным с помощью логического ответа.ok

python python-requests