2016-11-11 2 views
2

Я пытаюсь написать питон коды для загрузки и сохранения файла из этого URL: http://obiee.banrep.gov.co/analytics/saw.dll?Download&Format=excel&Extension=.xls&BypassCache=true&lang=es&NQUser=publico&NQPassword=publico&Path=/shared/Consulta%20Series%20Estadisticas%20desde%20Excel/1.%20IPC%20base%202008/1.3.%20Por%20rango%20de%20fechas/1.3.2.%20Por%20grupo%20de%20gasto&ViewState=h09v965dvurdtkj0iuni7m1kbe&ContainerID=o%3ago%7er%3areport&RootViewID=goPython: загрузка файла, который сопротивляется обычными методами

Ожидаемого результат должен быть, чтобы загрузить и сохранить обслуживаемый файл Excel.

Файл находится за некоторой базой данных оракула. Файл загружается в любом браузере. Расширение firefox в Live HTTP-заголовках говорит мне, что это запрос GET. В любом случае я пробовал обычные методы, и я всегда загружаю «saw.dll», который представляет собой простой XML-файл, а не ожидаемый файл Excel.

Вот что я пробовал:

import urllib,urlib2,shutil 

url = 'http://obiee.banrep.gov.co/analytics/saw.dll?Download' 
values = { 
    'Format' : 'excel', 
    'Extension' : '.xls', 
    'BypassCache' : 'true', 
    'lang' : 'es', 
    'NQUser' : 'publico', 
    'NQPassword' : 'publico', 
    'Path' : '/shared/Consulta Series Estadisticas desde Excel/1. IPC base 2008/1.3. Por rango de fechas/1.3.2. Por grupo de gasto', 
    'ViewState' : 'h09v965dvurdtkj0iuni7m1kbe', 
    'ContainerID' : 'o%3ago%7er%3areport', 
    'RootViewID' : 'go', 
} 

data = urllib.urlencode(values) 
req = urllib2.Request(url,data) 
response = urllib2.urlopen(req) 
myfile = open('test.xls', 'wb') 
shutil.copyfileobj(response.fp, myfile) 
myfile.close() 

Другой код, который я пробовал:

import requests,shutil 

response = requests.get("http://obiee.banrep.gov.co/analytics/saw.dll?Download&Format=excel&Extension=.xls&BypassCache=true&lang=es&NQUser=publico&NQPassword=publico&Path=/shared/Consulta%20Series%20Estadisticas%20desde%20Excel/1.%20IPC%20base%202008/1.3.%20Por%20rango%20de%20fechas/1.3.2.%20Por%20grupo%20de%20gasto&ViewState=h09v965dvurdtkj0iuni7m1kbe&ContainerID=o%3ago%7er%3areport&RootViewID=go",stream=True) 

with open('test.xls', 'wb') as out_file: 
    shutil.copyfileobj(response.raw, out_file) 
del response 

Я также попробовал другие вещи, такие, как с помощью wget, помещая некоторую задержку между запросом и сохранение, и т.д.

Любые идеи?

Спасибо, лучше всего.

+0

.xls - это формат XML ... Я не думаю, что вы пробовали открыть файл в excel? –

+0

Я сделал, но ожидаемый файл «1.3.2. Por grupo de gasto.xls», который является файлом данных. Открытие файла saw.dll (который является файлом, который загружаются моими кодами фактически в Excel), но его просто простой xml-файл, который мне не нужен ... – benzineengine

ответ

2

Вы пытались изменить агента пользователя?

... 
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'} 
requests.get(url=url, stream=True, headers=headers) 

Возможно, сервер возвращает различные ответы различным пользовательским агентам.

+0

На самом деле я попытался сделать что-то подобное, используя 'user_agent = 'Mozilla 5.0 (Windows 7; Win64; x64) '' ' file_name = "test.xls" ' ' u = urllib2.Request (url, headers = {' User-Agent ': user_agent}) ' Но не повезло. .. Но ваше предложение действительно работало для меня, используя агент пользователя, который вы предлагаете! Так много спасибо !!! – benzineengine

+0

Меняет ли пользовательский агент работу для вас? Я попробовал и не повезло. – tdelaney

+0

Это интересно. «Mozilla/5.0» было недостаточно, но «Mozilla/5.0 (Macintosh, Intel Mac OS X 10_10_1)». Похоже, вы должны быть более болтливыми, чем я ожидал. – tdelaney

0

Этот код на самом деле работает для меня:

import requests,shutil 

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'} 
response=requests.get(url='http://obiee.banrep.gov.co/analytics/saw.dll?Download&Format=excel&Extension=.xls&BypassCache=true&lang=es&NQUser=publico&NQPassword=publico&Path=/shared/Consulta%20Series%20Estadisticas%20desde%20Excel/1.%20IPC%20base%202008/1.3.%20Por%20rango%20de%20fechas/1.3.2.%20Por%20grupo%20de%20gasto&ViewState=h09v965dvurdtkj0iuni7m1kbe&ContainerID=o%3ago%7er%3areport&RootViewID=go', stream=True, headers=headers) 
with open('test.xls', 'wb') as out_file: 
    shutil.copyfileobj(response.raw, out_file) 
del response 

Это предложил ответ на Jean Cassol выше. Большое спасибо

Смежные вопросы