Как обрабатывать ссылки, содержащие пробелы между ними в 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 кодировать:
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))