0

谁能告诉我为什么它只下载 1k 字节的图像(我使用时同样的问题urlretrieve())?图像的大小比这大得多。

f = open('00000001.gif','wb')
f.write(urllib.urlopen('http://gifs.gifbin.com/082013/tn_1378920172_decapitated_snake_bites_itself.gif').read())
f.close()
4

2 回答 2

0

您需要验证您的网络或您尝试检索的 URL;Python 将从结果套接字中读取,直到到达 EOF,因此如果您收到的数据少于预期,您要么收到了不完整的响应,要么网络缩短了响应(代理服务器、防火墙、你有什么),或者您的假设关于服务器为该 URL 发送的内容是错误的。

您还想使用shutil.copyfileobj()为您做阅读:

from shutil import copyfileobj

im = urllib.urlopen('http://gifs.gifbin.com/082013/tn_1378920172_decapitated_snake_bites_itself.gif')
with open('00000001.gif', 'wb') as out:
    copyfileobj(im, out)

这不仅会处理以块的形式读取数据,而且会避免用大量二进制数据填充内存以进行引导。该with语句为您处理关闭文件对象。

于 2013-09-13T09:02:03.513 回答
-1

只需将 read() 更改为 read(-1)。

于 2013-09-13T09:06:42.693 回答