我想寫一個Python代碼下載,並從該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的Python:下載抵抗常用技術
預期的結果應該是下載並保存所服務的Excel文件。
該文件位於某種oracle數據庫的後面。該文件可以使用任何瀏覽器下載。 「Live HTTP headers」firefox extension告訴我這是一個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,把要求和環保等等之間的一些延遲
任何想法?
謝謝,最好。
.xls是一種XML格式...我不假設您已經嘗試在Excel中打開文件? –
我做了,但預期的文件是「1.3.2。Por grupo de gasto.xls」,它是一個數據文件。打開saw.dll(這是我的代碼實際上下載的文件)在Excel中的作品,但它只是一個普通的XML文件,我不需要... – benzineengine