Анимация
JavaScript
|
Главная Библионтека 27.2. urllib - чтение произвольных ресурсов по URL 365 unquote plus( string) Работает аналогично функции unquote(), но также заменяет символы + пробелами, как это необходимо для восстановления значений полей форм. urlencode(dict) Возвращает строку с данными dict (отображение строк-имен переменных к строкам-значениям) в формате application/x-www-form-urlencoded . Результат может быть использован в качестве аргумента data функций urlopen() и urlretrieve() и метода open() экземпляров URLopener и производных от него классов. Эта функция полезна для преобразования значений полей формы в строку запроса. Возвращаемая строка состоит из последовательности фрагментов вида key=value для каждой записи в словаре, разделенных символом где key и value обрабатываются с помощью функции quote plus(). Объекты, реализующие чтение ресурса, помимо read() , readline() , readlines() , fileno() и close() , характерных для файловых объектов (см. раздел 11.7), имеют следующие методы: info() Возвращает экземпляр класса mimetools.Message, содержащий метаинформа-цию о ресурсе. При использовании протокола HTTP этот объект содержит информацию обо всех заголовках. При использовании протокола FTP заголовок Content-Length будет присутствовать, если сервер посылает информацию о длине файла. При обращении к локальному файлу возвращаемый этим методом объект будет содержать заголовок Date с датой и временем последнего изменения, заголовок Content-Length с размером файла и заголовок Content-Type с предполагаемым типом файла. geturl() Возвращает истинный URL ресурса. В некоторых случаях HTTP-сервер перенаправляет клиента на другой URL. Такие перенаправления автоматически обрабатываются, и Вы получаете ресурс с новым URL, узнать который можно с помощью этого метода. Функции urlopen() и urlretrieve() создают и используют экземпляр класса FancyURLopener. Созданный объект сохраняется для дальнейшего использования этими функциями. Если Вам необходим более тонкий контроль - используйте FancyURLopener, URLopener или производные от них классы. URLopener ([proxies [, **x509]]) Базовый класс, реализующий чтение ресурсов. Если Вам не нужна поддержка каких-либо дополнительных протоколов - используйте класс FancyURLopener. Если задан и не равен None аргумент proxies, он должен быть отображением идентификаторов протоколов (scheme identifier) к URL соответствующих proxy-серверов и будет использован для определения способа соединения. По умолчанию URL proxy-серверов определяются по схеме, описанной в начале раздела. Для аутентификации при использовании протокола HTTPS должны быть указаны именованные аргументы (x509) key file и cert file. FancyURLopener ([proxies [, **x509]]) Этот класс является производным от класса URLopener и предоставляет обработку HTTP-ответов с кодами 301, 302 и 401. При получении ответов с кодами 301 и 302 используется заголовок Location для переадресации на другой URL. Для ответов с кодом 401 используется базовая аутентификация. Аргументы конструктора этого класса имеют такое же значение, как и для конструктора класса URLopener. Экземпляры классов URLopener и FancyURLopener имеют следующие методы и атрибуты данных: open( url [, data]) Открывает ресурс url и возвращает объект, аналогичный файловому, реализующий чтение ресурса (см. выше). Этот метод проверяет кэш, обрабатывает информацию о proxy-сервере и вызывает один из методов open scheme (), где scheme заменяется идентификатором протокола (в котором символы - заменены на ), или метод open unknown() , если используемый идентификатор протокола неизвестен. Аргумент data имеет такое же значение, как и для функции urlopen() . open unknown( url [, data]) Этот метод может быть переопределен в производном классе для обработки URL с неизвестным идентификатором протокола. Исходная реализация генерирует исключение IOError. retrieve( url [, filename [, reporthook [, data]]]) Копирует ресурс url в локальный файл. Если URL указывает на локальный файл или кэш уже содержит свежую копию ресурса, копирование не производится. Метод возвращает кортеж вида ( filename, headers) , где filename - имя локального файла с копией ресурса и headers - None, если url ссылается на локальный файл, иначе - объект, возвращаемый методом info() объекта, реализующего чтение ресурса (см. выше). Аргумент filename указывает имя локального файла, в который будет производиться копирование. По умолчанию имя файла генерируется с помощью функции tempfile.mktempO. Задав аргумент reporthook Вы можете отслеживать процесс копирования. Функция (или другой объект, поддерживающий вызов) reporthook вызывается при установлении сетевого соединения и после загрузки каждого блока ресурса с тремя аргументами: число загруженных блоков, размер блока в байтах и размер файла (-1, если размер неизвестен). Аргумент data имеет такое же значение, как и для функции urlopen() . version Этот атрибут класса является строкой с именем программы клиента, которое будет использовано при конструировании HTTP-запросов. По умолчанию используется строка Python-urllib/urllib ver, где urllib ver - версия модуля 27.3. urlparse - операции над URL 367 urllib. Вы можете переопределить атрибут version в определении производного класса, чтобы изменить имя программы, посылаемое серверу. Для совместимости с предыдущими версиями, если URL без идентификатора протокола (scheme identifier) не соответствует существующему локальному файлу, производится попытка использовать его для FTP протокола. Это может привести к сбивающим с толку сообщениям об ошибках. При установлении сетевого соединения может произойти задержка на произвольное время. Таким образом, использование средств модуля urllib в однопоточных программах сильно затруднено. Следующий пример использует метод GET для загрузки ресурса по протоколу HTTP: >>> import urllib >>> params = urllib.urlencode({spam : 1, ... eggs : 2, ... bacon: 0}) >>> f = urllib.urlopen( ... "http: www.musi-cal.com/cgi-bin/query?" + ... params) >>> print f.readO И тот же самый ресурс, используя метод POST: >>> import urllib >>> params = urllib.urlencode({spam : 1, ... eggs : 2, ... bacon: 0}) >>> f = urllib.urlopen( ... "http: www.musi-cal.com/cgi-bin/query?", ... params) >>> print f.readO 27.3 urlparse - операции над URL Этот модуль определяет средства для разбиения URL (Uniform Resource Locator, единообразный указатель ресурса, RFC 1738) на компоненты, конструирования URL из компонент и преобразования относительных URL в абсолютные (RFC 1808). urlparse (urlstring [, default scheme [, allow fragments]]) Разбивает URL на компоненты и возвращает кортеж из шести строк: идентификатор протокола (scheme identifier), положение в сети, путь, параметры, строка 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 [ 116 ] 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |