Желілік обьектілерді жктеуді функциялары
Белгілі 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