2017-01-25 1 views
0

Я пытаюсь загрузить изображение, однако оно действительно работает. Он заблокирован защитой ddos?urlretrieve не работает для этого сайта

Вот код:

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

В основном скачать этот образ, как "test.png." Я использую python3, следовательно, urllib.request перед urlretrieve.

import urllib.request 

Имейте это также.

В любом случае, я могу загрузить изображение? благодаря!

+1

You может иметь больше удачи с ответом, если вы разместите дополнительную информацию, например, какую ошибку вы получаете. – shazow

ответ

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()) 

Скорее глупо, но когда администратор сервера сходит с ума, просто быть столь же глупо, как он ...

+0

спасибо! Также странно, но с помощью write() работал без заголовков, используя: f.write (request.get ("http://archive.is/Xx9t3/scr.png") .content) – user3294913

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

magic позади этого - как извлекается ресурс, с requests эта часть является линией stream=True. Некоторые серверы более ограничены этими методами, чтобы вытащить некоторые ресурсы, такие как носители.