Форум сайта python.su
import cookielib
import urllib2
class UrlRequest(object):
data = ''
cookies = cookielib.CookieJar()
handle = None
opener = None
def __init__(self, proxy='', cookies=None):
if cookies == None:
cookies = self.cookies
cookie_handler = urllib2.HTTPCookieProcessor(cookies)
if proxy:
proxy_handler = urllib2.ProxyHandler({'http': proxy})
opener = urllib2.build_opener(proxy_handler, cookie_handler)
else:
opener = urllib2.build_opener(cookie_handler)
self.cookies = cookies
self.opener = opener
def open(self, url, data=None):
self.handle = self.opener.open(url, data)
self.data = self.handle.read()
return self
def store(filename, data, method="w"):
fh = file(filename, method)
fh.write(data)
fh.close()
image = UrlRequest().open('http://ya.ru/logo.gif').data
store('image.gif', image)
Отредактировано (Май 20, 2009 23:09:12)
Офлайн
nerezusСкорее всего надо: method=“wb”
def store(filename, data, method=“w”):
Офлайн
о_О
А по умолчанию они не бинарные? о_О
Спасибо, заработало.
Как всегдпа проблема в отладке: надо было оба файла сравнить: увидел бы лишние \r
Офлайн
nerezus
В винде - нет, под линуксом вроде как бинарные по-умолчанию.
Офлайн
Мну для загрузки больших файлов юзает urllib.urlretrieve() - он ведет себя лучше намного, но не катит если необходимо качать и сцылко одноразовая, если сцылко не одноразовая - то можно сделать .geturl() в urllib2 (если ссылку нужно получать с куками) а потом urllib.urlretrieve(url, filename) По умолчанию там вроде бинарные права стоят
Отредактировано (Май 21, 2009 09:10:41)
Офлайн