【问题标题】:urlretrieve not working for this siteurlretrieve 不适用于此站点
【发布时间】:2017-01-25 05:25:14
【问题描述】:

我正在尝试下载图像,但它似乎确实有效。是否被ddos保护阻止?

代码如下:

urllib.request.urlretrieve("http://archive.is/Xx9t3/scr.png", "test.png")

基本上将该图像下载为“test.png”。我正在使用 python3,因此在 urlretrieve 之前使用 urllib.request。

import urllib.request

也有。

有什么方法可以下载图片吗?谢谢!

【问题讨论】:

  • 如果您发布更多信息,例如您遇到的错误,您可能会更幸运地得到答案。

标签: python urllib


【解决方案1】:

出于我无法想象的原因,服务器需要一个众所周知的用户代理。所以你必须假装使用例如firefox,它会接受发送图像:

# first build a request object
req = urllib.request.Request("http://archive.is/Xx9t3/scr.png",
        headers = {
           'User-agent':
              'Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0'})

#then use it
resp = urllib.request.urlopen(req)
with open("test.png","wb") as fd:
    fd.write(resp.read())

相当愚蠢,但是当服务器管理员发疯时,就和他一样愚蠢......

【讨论】:

【解决方案2】:

我建议你使用requests,基本上你试图获取图像的方式是被禁止的,检查这个:

import requests
import shutil

r = requests.get('http://archive.is/Xx9t3/scr.png', stream=True)
if r.status_code == 200:
    with open("test.png", 'wb') as f:
        r.raw.decode_content = True
        shutil.copyfileobj(r.raw, f)

这个sn-p改编自here

这背后的魔术是如何检索资源,requests 这部分是stream=True 行。一些服务器在拉取媒体等资源时受到更多限制。

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 2023-03-11
    • 2022-08-21
    • 2011-06-09
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2016-11-25
    • 2013-09-04
    相关资源
    最近更新 更多