Функции для анализа URL
Согласно документу RFC 2396 URL должен строиться по следующему шаблону:
scheme://netloc/path;parameters?query#fragment
где
scheme
Адресная схема. Например: http, ftp, gopher.
netloc
Местонахождение в сети.
path
Путь к ресурсу.
params
Параметры.
query
Строка запроса.
frag
Идентификатор фрагмента.
Одна из функций уже использовалась для формирования URL — urllib.urlencode(). Кроме нее в модуле urllib имеются и другие функции:
quote(s, safe='/')
Функция экранирует символы в URL, чтобы их можно было отправлять на web–сервер. Она предназначена для экранирования пути к ресурсу, поэтому оставляет '/' как есть. Например:
>>> urllib.quote("rnd@onego.ru")
'rnd%40onego.ru'
>>> urllib.quote("a = b + c")
'a%20%3D%20b%20%2B%20c'
>>> urllib.quote("0/1/1")
'0/1/1'
>>> urllib.quote("0/1/1", safe="")
'0%2F1%2F1'
quote_plus(s, safe='')
Функция экранирует некоторые символы в URL (в строке запроса), чтобы их можно было отправлять на web–сервер. Аналогична quote(), но заменяет пробелы на плюсы.
unquote(s)
Преобразование, обратное quote_plus(). Пример:
>>> urllib.unquote('a%20%3D%20b%20%2B%20c')
'a = b + c'
unquote_plus(s)
Преобразование, обратное quote_plus(). Пример:
>>> urllib.unquote_plus('a+=+b+%2B+c')
'a = b + c'
Для анализа URL можно использовать функции из модуля urlparse:
urlparse(url, scheme='', allow_fragments=1)
Разбирает URL в 6 компонентов (сохраняя экранирование символов):
scheme://netloc/path;params?query#frag
urlsplit(url, scheme='', allow_fragments=1)
Разбирает URL в 6 компонентов (сохраняя экранирование символов):
scheme://netloc/path?query#frag
urlunparse((scheme, netloc, url, params, query, fragment))
Собирает URL из 6 компонентов.
urlunsplit((scheme, netloc, url, query, fragment))
Собирает URL из 5 компонентов.
Пример:
>>> from urlparse import urlsplit, urlunsplit
>>> URL = "http://google.com/search?q=Python"
>>> print urlsplit(URL)
('http', 'google.com', '/search', 'q=Python', '')
>>> print urlunsplit(
... ('http', 'google.com', '/search', 'q=Python', ''))
http://google.com/search?q=Python
Еще одна функция того же модуля urlparse позволяет корректно соединить две части URL — базовую и относительную:
>>> import urlparse
>>> urlparse.urljoin('http://python.onego.ru', 'itertools.html')
'http://python.onego.ru/itertools.html'
Больше книг — больше знаний!
Заберите 30% скидку новым пользователям на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ