Функции для анализа 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% скидку новым пользователям на все книги Литрес с нашим промокодом

ПОЛУЧИТЬ СКИДКУ