Как кодировать URL в Python 3?

Я попытался выполнить документацию, но не смог использовать urlparse.parse.quote_plus() в Python 3:

from urllib.parse import urlparse

params = urlparse.parse.quote_plus({'username': 'administrator', 'password': 'xyz'})

Я получаю

AttributeError: объект 'function' не имеет атрибута 'parse'

Ответ 1

Вы неправильно читаете документацию. Вам нужно сделать две вещи:

  • Укажите каждый ключ и значение из вашего словаря и
  • Кодировать их в URL

К счастью, urllib.parse.urlencode выполняет обе эти операции за один шаг и что функцию вы должны использовать.

from urllib.parse import urlencode, quote_plus

payload = {'username':'administrator', 'password':'xyz'}
result = urlencode(payload, quote_via=quote_plus)
# 'password=xyz&username=administrator'

Ответ 2

Для python 3 вы можете попробовать использовать quote вместо quote_plus

import urllib

print urllib.quote("http://www.sample.com/")

Результат:

http%3A%2F%2Fwww.sample.com%2F

ИЛИ ЖЕ

from requests.utils import requote_uri
requote_uri("http://www.sample.com/?id=123 abc")

Результат:

'https://www.sample.com/?id=123%20abc'

Ответ 3

Вы ищете urllib.parse.urlencode

import urllib.parse

params = {'username': 'administrator', 'password': 'xyz'}
encoded = urllib.parse.urlencode(params)
# Returns: 'username=administrator&password=xyz'