为什么我无法使用urllib2.urlopen()下载整个图像文件

5 投票
1 回答
1040 浏览
提问于 2025-04-15 21:28

当我运行以下代码时,它似乎只下载了文件的一小部分,然后就停止了。有时候我会遇到10054错误,但通常情况下,它只是退出,没有下载完整个文件。我的网络连接很糟糕,是无线的,下载大文件时经常会中断,但我的浏览器下载200k的图片文件没有问题。我对Python和编程都很陌生,所以我在想我是不是漏掉了什么细节。

import urllib2
xkcdpic=urllib2.urlopen("http://imgs.xkcd.com/comics/literally.png")
xkcdpicfile=open("C:\\Documents and Settings\\John Gann\\Desktop\\xkcd.png","w")
while 1:
    chunk=xkcdpic.read(4028)
    if chunk:
        print chunk
        xkcdpicfile.write(chunk)
    else:
        break

1 个回答

10

在Windows上写一个二进制文件时,你需要特别地把它以二进制模式打开,也就是说:

xkcdpicfile=open("C:\\Documents and Settings\\John Gann\\Desktop\\xkcd.png",
                 "wb")

注意选项中多了一个 b,应该是 "wb",而不是仅仅 "w"

我还建议去掉 print chunk,因为这可能会把一些随机的二进制数据发送到控制台,导致一些不想要的效果。如果你想看看那些十六进制的字节飞过,没什么意义的话,也许可以用 print repr(chunk),如果你真的想这样做。不过我觉得显示一些更有意义的东西会更好,比如 len(chunk),还有可能是到目前为止的总字节数。

撰写回答