Язык программирования Python.

Функции для анализа 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'.