Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Желілік обьектілерді жүктеудің функциялары




Белгілі URL бойынша WWW-объектісінің қарапайым жағдайы келесі мысалда көрсетілген.

import urllib

doc = urllib.urlopen("http://python.onego.ru").read()

print doc[:40]

urllib.urlopen() функциясы read() әдісімен оқитын, файлтәрізді обьект құрады. Осы обьектің басқа әдістері: readline(), readlines(), fileno(), close() әдеттегі файл бойынша жұмыс істейді, сондай-ақ Message-объект серверінен алынғанмен сәйкестерді қайтаратын info() әдісі бар. Бұл обьектіні қосымша мәлімет алу үшін қолдануға болады:

>>> import urllib

>>> f = urllib.urlopen("http://python.onego.ru")

>>> print f.info()

Date: Sat, 25 Dec 2004 19:46:11 GMT

Server: Apache/1.3.29 (Unix) PHP/4.3.10

Content-Type: text/html; charset=windows-1251

Content-Length: 4291

>>> print f.info()['Content-Type']

text/html; charset=windows-1251

urllib.urlopen() функциясы көмегімен күрделілек заттарды істеуге болады, мысалы, web-серверге форма мәлімметтерін жіберу. Белгілі болғандай, web-формалардың толтырылған мәліметтері web-серверге GET әдісін немесе POST әдісін қолдануымен жіберілуі мүмкін. GET әдісі URL-дегі "?" белгісінен кейін барлық жіберілген параметрлернің кодталуымен байланысты, ал POST әдісінің жағдайында мәліметтер HTTP-сұрауының денесінде жіберіледі. Жіберудің екі нұсқасы төменде келтірілген:

import urllib

data = {"search": "Python"}

enc_data = urllib.urlencode(data)

# метод GET

f = urllib.urlopen("http://searchengine.com/search" + "?" + enc_data)

print f.read()

# метод POST

f = urllib.urlopen("http://searchengine.com/search", enc_data)

print f.read()

 

Кейбір жағдайларда мәліметтер қайталаныатын аттарға ие. Бұл жағдайда urllib.urlencode() параметірі ретінде сөздік орнына ат-мән жұбының тізбектілігін қолдануға болады:

>>> import urllib

>>> data = [("n", "1"), ("n", "3"), ("n", "4"), ("button", "Привет"),]

>>> enc_data = urllib.urlencode(data)

>>> print enc_data

n=1&n=3&n=4&button=%F0%D2%C9%D7%C5%D4

 

urllib модулі прокси-сервер арқылы веб-обьектілерді жүктеуге мүмкіндік береді. Егер ештене көрсетпесек,нақты ОЖ тәсілі қабылдануымен берілген прокси-сервер қолданылады. Unix-те прокси-сервер http_proxy, ftp_proxy және т.б. айнымалы арасында беріледі. Windows-та прокси-серверлер реестрде жазылған, ал Mac OS-та олар Internet конфигурациясынан алынады. Прокси-серверді proxies к urllib.urlopen() атты параметр сияқты беруге болады.

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

proxies = proxies={'http': 'http://www.proxy.com:3128'}

f = urllib.urlopen(some_url, proxies=proxies)

# Не использовать прокси

f = urllib.urlopen(some_url, proxies={})

# Использовать прокси по умолчанию

f = urllib.urlopen(some_url, proxies=None)

f = urllib.urlopen(some_url)

 

urlretrieve() функциясы берілген URL желілік обьектісін файлда жазуға мүмкіндік береді. Ол келесідей параметрлерге ие:

urllib.urlretrieve(url[, filename[, reporthook[, data]]])

Мұндағы url-желілік обьектінің URL-і, filename- обьекті сыйдыру үшін локальды файл аты, reporthook- жүктеме күйі жайлы хабарлама үшін шақырылатын функия, data-POST (егер ол қолданылса) әдісі үшін мәліметтер. Функция (filepath, headers) кортежді қайтарады, мұндағы filepath – локальды файл аты.

urllib.urlretrieve() функциясының интерактивтілігін қамтамасыз ету үшін reporthook() берілген функциясын уақыт өте келе шақырады. Бұл функцияда үш аргумент жіберіледі:қабылданған блоктар саны, өлшемі, блоктың және байттағы (бұл параметр -1-ге тең, егер ол белгілі болса) қабылданған жалпы өлшемі.

Келесі мысалда бағдарлама үлкен файл қабылдайды.

FILE = 'boost-1.31.0-9.src.rpm'

URL = 'http://download.fedora.redhat.com/pub/fedora/linux/core/3/SRPMS/' + FILE

def download(url, file):

import urllib, time

start_t = time.time()

def progress(bl, blsize, size):

dldsize = min(bl*blsize, size)

if size!= -1:

p = float(dldsize) / size

try:

elapsed = time.time() - start_t

est_t = elapsed / p - elapsed

except:

est_t = 0

print "%6.2f %% %6.0f s %6.0f s %6i / %-6i bytes" % (

p*100, elapsed, est_t, dldsize, size)

else:

print "%6i / %-6i bytes" % (dldsize, size)

urllib.urlretrieve(URL, FILE, progress)

download(URL, FILE)

Бұл бағдарлама келесідей шығарады

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





Поделиться с друзьями:


Дата добавления: 2017-01-28; Мы поможем в написании ваших работ!; просмотров: 769 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Самообман может довести до саморазрушения. © Неизвестно
==> читать все изречения...

3007 - | 2793 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.