【问题标题】:Trying to download an image file and I keep getting a file saying "Image Not Available"尝试下载图像文件,但我不断收到“图像不可用”的文件
【发布时间】:2016-05-11 15:23:38
【问题描述】:

我正在尝试从 Google Books API 下载书籍封面图片。它最终给了我一个这样的链接:

http://books.google.com/books/content?id=Tum3dwFzSngC&printsec=frontcover&img=1

如果您单击它,您可以看到它已加载并存在。那么,我只是使用此代码下载图像:

import requests
r = requests.get('http://books.google.com/books/content?id=Tum3dwFzSngC&printsec=frontcover&img=1')
with open('test.jpeg', "wb") as f:      
    f.write(r.content)
    f.close()

但是,我从中获得的图像始终只是一个 9kb 的文件,上面写着“图像不可用”,我假设当请求的图像不存在时,它只是来自 API。我在这里做错了吗?它看起来非常标准和简单,所以我不确定哪里错了。

【问题讨论】:

    标签: python


    【解决方案1】:

    服务器不想回答你,因为它发现请求不是来自浏览器 - 这是一种常见的做法。例如,我在 Chrome 中打开了图像,并复制了 Chrome 作为 CURL 请求发送的请求,它可以工作。简单发送:

    curl 'http://books.google.com/books/content?id=Tum3dwFzSngC&printsec=frontcover&img=1'
    

    没有。

    服务器正在检查用户代理。如果未找到有效的,则不发送图像。您可以easily fake a user agent,或使用Mechanize 之类的东西来模拟浏览器。将响应保存到img.jpg 的 CURL 请求的一个简单示例是:

    curl 'http://books.google.com/books/content?id=Tum3dwFzSngC&printsec=frontcover&img=1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36' >> img.jpg
    

    【讨论】:

    • 我将用户代理添加到请求中,但它仍然下载了相同的“不可用”文件。
    • 您尝试过我包含的 CURL 请求吗?这是一个非常基本的请求,并且有效。您确定已正确添加用户代理吗?您可以使用用于定义 UA 的代码更新您的帖子吗?
    • 我使用了这个:header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36'} r = requests.get('http://books.google.com/books/content?id=Tum3dwFzSngC&printsec=frontcover&img=1', headers=header),我尝试了 curl,但仍然给了我相同的不可用图像。
    • 您完全按照我输入的方式尝试了 CURL,但它仍然给出了相同的结果?你检查img.jpg的结果了吗?
    • 是的,我复制了 curl 命令(仅将单引号更改为普通引号),运行它然后打开它创建的 img.jpg 并显示相同的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多