Чтение онлайн

на главную - закладки

Жанры

Язык программирования Python
Шрифт:

Листинг

0.00 % 1 s 0 s 0 / 6952309 bytes

0.12 % 5 s 3941 s 8192 / 6952309 bytes

0.24 % 7 s 3132 s 16384 / 6952309 bytes

0.35 % 10 s 2864 s 24576 / 6952309 bytes

0.47 % 12 s 2631 s 32768 / 6952309 bytes

0.59 % 15 s 2570 s 40960 / 6952309 bytes

0.71 % 18 s 2526 s 49152 / 6952309 bytes

0.82 % 20 s 2441 s 57344 / 6952309 bytes

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

Возможности urllib2

Функциональности модулей urllib и urlparse хватает для большинства задач, которые решают сценарии на Python как web–клиенты. Тем не менее, иногда требуется больше. На этот случай можно использовать модуль для работы с протоколом HTTP — httplib — и создать собственный класс для HTTP–запросов (в лекциях модуль httplib не рассматривается). Однако вполне вероятно, что нужная функциональность уже имеется в модуле urllib2.

Одна из полезных возможностей этих модулей — доступ к web–объектам, требующий авторизации. Ниже будет рассмотрен пример, который не только обеспечит доступ с авторизацией, но и обозначит основную идею модуля urllib2: использование обработчиков (handlers), каждый из которых решает узкую специфическую задачу.

Следующий пример показывает, как создать собственный открыватель URL с помощью модуля urllib2 (этот пример взят из документации по Python):

Листинг

import urllib2

# Подготовка идентификационных данных

authinfo = urllib2.HTTPBasicAuthHandler

authinfo.add_password('My page', 'localhost', 'user1', 'secret')

# Доступ через прокси

proxy_support = urllib2.ProxyHandler({'http' : 'http://localhost:8080'})

# Создание нового открывателя с указанными обработчиками

opener = urllib2.build_opener(proxy_support,

authinfo,

urllib2.CacheFTPHandler)

# Установка поля с названием клиента

opener.addheaders = [('User–agent', 'Mozilla/5.0')]

# Установка нового открывателя по умолчанию

urllib2.install_opener(opener)

# Использование открывателя

f = urllib2.urlopen('http://localhost/mywebdir/')

print f.read[:100]

В этом примере получен доступ к странице, которую охраняет mod_python (см. предыдущую лекцию). Первый аргумент при вызове метода add_password задает область действия (realm) идентификационных данных (он задан директивой AuthName «My page» в конфигурации web–сервера). Остальные параметры достаточно понятны: имя хоста, на который нужно получить доступ, имя пользователя и его пароль. Разумеется, для корректной работы примера нужно, чтобы на локальном web–сервере был каталог, требующий авторизации.

Поделиться:
Популярные книги

Светлая тьма. Советник

Шмаков Алексей Семенович
6. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Светлая тьма. Советник

Огненный князь 2

Машуков Тимур
2. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 2

Первый среди равных. Книга V

Бор Жорж
5. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга V

Вперед в прошлое 10

Ратманов Денис
10. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 10

Император Пограничья 10

Астахов Евгений Евгеньевич
10. Император Пограничья
Фантастика:
городское фэнтези
аниме
фантастика: прочее
попаданцы
5.00
рейтинг книги
Император Пограничья 10

Имперец. Том 1 и Том 2

Романов Михаил Яковлевич
1. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 1 и Том 2

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Второгодка. Книга 4. Подавать холодным

Ромов Дмитрий
4. Второгодка
Фантастика:
героическая фантастика
альтернативная история
сказочная фантастика
5.00
рейтинг книги
Второгодка. Книга 4. Подавать холодным

Идеальный мир для Лекаря 21

Сапфир Олег
21. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 21

An ordinary sex life

Астердис
Любовные романы:
современные любовные романы
love action
5.00
рейтинг книги
An ordinary sex life

На границе империй. Том 2

INDIGO
2. Фортуна дама переменчивая
Фантастика:
космическая фантастика
7.35
рейтинг книги
На границе империй. Том 2

Эволюционер из трущоб. Том 3

Панарин Антон
3. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
6.00
рейтинг книги
Эволюционер из трущоб. Том 3

Смешенье

Стивенсон Нил Таун
2. Барочный цикл
Проза:
историческая проза
7.00
рейтинг книги
Смешенье

Мы друг друга не выбирали

Кистяева Марина
1. Мы выбираем...
Любовные романы:
остросюжетные любовные романы
прочие любовные романы
современные любовные романы
5.00
рейтинг книги
Мы друг друга не выбирали