urlretrieve不适合这个网站

时间:2017-01-25 05:25:14

标签: python urllib

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

以下是代码:

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

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

import urllib.request

也有。

我可以用任何方式下载图片吗?谢谢!

2 个答案:

答案 0 :(得分: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())

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

答案 1 :(得分:0)

我建议你使用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)

此代码段改编自here

这背后的魔法是如何检索资源的,requests该部分是stream=True行。一些服务器受这种方法的限制,以提取媒体等资源。