当前位置: 首页 > 面试题库 >

如何使用urllib从Web下载图像

南宫俊喆
2023-03-14
问题内容

我正在尝试使用以下代码下载图像:

from urllib import urlretrieve
urlretrieve('http://gdimitriou.eu/wp-content/uploads/2008/04/google-image-search.jpg', 
            'google-image-search.jpg')

有效。该图像已下载,可以通过任何图像查看器软件打开。

但是,下面的代码不起作用。下载的图像只有2KB,任何图像查看器都无法打开。

from urllib import urlretrieve
urlretrieve('http://upload.wikimedia.org/wikipedia/en/4/44/Zindagi1976.jpg', 
            'Zindagi1976.jpg')

这是HTML格式的结果。

    ERROR

The requested URL could not be retrieved

While trying to retrieve the URL: http://upload.wikimedia.org/wikipedia/en/4/44/Zindagi1976.jpg

The following error was encountered:

Access Denied.
Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.

Your cache administrator is nobody. 
Generated Mon, 05 Dec 2011 17:19:53 GMT by sq56.wikimedia.org (squid/2.7.STABLE9)

问题答案:

如果使用了以下内容,则可以下载图像:

wget http://upload.wikimedia.org/wikipedia/en/4/44/Zindagi1976.jpg

但是,如果您执行以下操作:

from urllib import urlretrieve
urlretrieve('http://upload.wikimedia.org/wikipedia/en/4/44/Zindagi1976.jpg', 
            'Zindagi1976.jpg')

您可能无法下载图像。这可能是因为维基百科可能具有拒绝机器人或机器人(未知客户端)的规则(robot.txt)。 尝试模拟浏览器。

为此,您必须将以下内容添加为标题的一部分:

('User-agent', 
 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) 
 Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')

您可以执行以下操作

>>> from urllib import FancyURLopener
>>> class MyOpener(FancyURLopener):
...     version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'
... 
>>> myopener = MyOpener()
>>> myopener.retrieve('http://upload.wikimedia.org/wikipedia/en/4/44/Zindagi1976.jpg', 'Zindagi1976.jpg')
('Zindagi1976.jpg', <httplib.HTTPMessage instance at 0x1007bfe18>)

这将检索文件



 类似资料:
  • 问题内容: 我正在尝试制作一个Python脚本,该脚本可以下载网络漫画并将其放入我桌面上的文件夹中。我在这里发现了一些类似的程序,它们的功能相似,但是却完全不符合我的需要。我发现最相似的代码就在这里(http://bytes.com/topic/python/answers/850927-problem-using-urllib-download-images)。我尝试使用此代码: 然后,我在计算

  • 我试图下载和保存图像从网络使用python的模块。 以下是我使用的(工作)代码: 以下是使用

  • 问题内容: 我需要以简单的Java独立应用程序从Web加载图像。有任何想法吗? 问题答案: 这足以启动您吗?不知道您要从那里做什么。

  • @getmapping(value=“/image”,produces=“application/pdf”)@responsebody public String downloadFile(@pathvariable(“path”)String path)抛出IOException{ClassPathResource downloadLink=new ClassPathResource(“/ass

  • 问题内容: 我已经知道映像在哪里,但是为了简单起见,我想使用JSoup本身下载映像。(这是为了简化获取cookie,引荐来源网址等)。 这是我到目前为止所拥有的: 问题答案: 在通过JSoup和一些实验找到答案之前,我什至没有写完问题。

  • 问题内容: 我正在尝试使用的模块从网络下载并保存图像。 这是我使用的(工作)代码: 你能帮助我从响应中使用什么属性吗? 问题答案: 你可以使用对象,也可以遍历响应。 默认情况下,使用类似文件的对象不会解码压缩的响应(使用GZIP或deflate)。你可以通过将属性设置为True(requests将其设置False为控制自身解码)来强制为你解压缩。然后,你可以使用将数据流式传输到文件对象: 要遍历响