为什么我不能用urllib2.urlopen()下载整个图像文件

Joh*_*ann 5 python image download

当我运行以下代码时,它似乎只是下载文件的第一个小位然后退出.有时候,我会得到一个10054错误,但通常只是在没有获取整个文件的情况下退出.我的互联网连接是无聊的,我经常在firefox中的较大文件上下载,但我的浏览器获取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
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 10

要在Windows上编写二进制文件,您需要将其显式打开为二进制文件,即:

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

注意额外b的选项:"wb",只是"w"!

我还建议丢失print chunk可能会将任意二进制序列发送到控制台,并可能导致不良副作用.如果你强烈要求毫无意义地看到十六进制字节,也许print repr(chunk),如果你坚持的话.但我会发现更有意义的东西,例如len(chunk),到目前为止可能是字节总数.