Как обрабатывать ссылки, содержащие пробелы между ними в Python

Я пытаюсь извлечь ссылки с веб-страницы, а затем открыть их в своем веб-браузере. Моя программа на Python может успешно извлекать ссылки, но некоторые ссылки имеют пробелы между ними, которые нельзя открыть с помощью request module,

Например example.com/A, B C он не откроется с помощью модуля запроса. Но если я преобразую его в example.com/A,%20B%20C это откроется. Есть ли в python простой способ заполнить пробелы %20?

`http://example.com/A, B C` ---> `http://example.com/A,%20B%20C`

Я хочу преобразовать все ссылки, между которыми есть пробелы, в вышеуказанный формат.

2 ответа

Решение

urlencode фактически берет словарь, например:

>>> urllib.urlencode({'test':'param'})
'test=param'`

Вам на самом деле нужно что-то вроде этого:

import urllib
import urlparse

def url_fix(s, charset='utf-8'):
    if isinstance(s, unicode):
        s = s.encode(charset, 'ignore')
    scheme, netloc, path, qs, anchor = urlparse.urlsplit(s)
    path = urllib.quote(path, '/%')
    qs = urllib.quote_plus(qs, ':&=')
    return urlparse.urlunsplit((scheme, netloc, path, qs, anchor))

Затем:

>>>url_fix('http://example.com/A, B C')    
'http://example.com/A%2C%20B%20C'

Взято из Как я могу нормализовать URL в Python

Используйте URL кодировать:

import urllib
urllib.urlencode(yourstring)

Рабочее решение Python 3 для ответа rofls.

import urllib.parse as urlparse
def url_fix(s):
    scheme, netloc, path, qs, anchor = urlparse.urlsplit(s)
    path = urlparse.quote(path, '/%')
    qs = urlparse.quote_plus(qs, ':&=')
    return urlparse.urlunsplit((scheme, netloc, path, qs, anchor))
Другие вопросы по тегам