使用Python从URL下载图像会导致损坏的结果

时间:2013-10-05 20:04:45

标签: python image download urllib python-requests

我正在编写一个脚本,用于从其API下载Steam配置文件图片,由Steam API提供。无论我使用哪种方法,我都会收到损坏的结果:

Example with corrupted and original images

Steam's link to the original image

使用“请求”库:

avatar = open(avatarName, 'wb')
avatar.write(requests.get(avatarURL).content)
avatar.close()

以及:

avatar = requests.get(avatarURL)
with open(avatarName, 'wb') as f:
    f.write(avatar.content)

使用“urllib”库:

urllib.urlretrieve(avatarURL, avatarName)

以及:

avatar = urllib.URLopener()
avatar.retrieve(avatarURL, avatarName)

直接在链接上使用wget(注意这是在Python之外,只是从终端开始):

wget http://media.steampowered.com/steamcommunity/public/images/avatars/ad/adec76ed86e8ffa892d847c8e619262d30e74e32_full.jpg

由于这是一个腐败问题,我认为它可能与我打开文件对象时设置/不设置二进制标志有关。 我还没有尝试的另一种方法是导入操作系统命令并使用wget下载文件,然后从那里开始工作。 wget也会提供损坏的结果。

有趣的是,似乎所使用的每种方法都会导致图像每次都以完全相同的方式被破坏。

我还没有使用过urllib2(这里),因为我检查过的大多数Q& A都在使用urllib。

1 个答案:

答案 0 :(得分:1)

在@ ton1c之后说一切都适合他,我尝试从另一个系统运行wget,它运行得很好。我正在使用Filezilla将文件传输到我的服务器或从我的服务器传输文件,因此我通过浏览器导航到它们并正常渲染所有图像实际在服务器上。显然使用Filezilla将它们下载到我的计算机导致了损坏。这是一个不同的问题,但是我会自己解决的一个小问题。