无法使用urllib2下载整个文件

您好我试图从这个url( http://www.sicom.gov.co/precios/controller?accion=ExportToExcel )下载一个Excel文件,然后我需要使用xlrdparsing它。

问题是,当我把Url放在浏览器上的时候,我得到的是一个大概2MB的excel文件,但是当我使用urllib2,http2lib甚至是从命令行curl下载文件的时候,我只能得到一个4k的文件,显然parsing不完整文件惨败。

奇怪的是,xlrd似乎能够从下载的文件中读取正确的表名,所以我猜这个文件是正确的,但显然是不完整的。

这里是我想要实现的一些示例代码

import urllib2 from xlrd import open_workbook excel_url = 'http://www.sicom.gov.co/precios/controller?accion=ExportToExcel' result = urllib2.urlopen(excel_url) wb = open_workbook(file_contents=result.read()) response = "" for s in wb.sheets(): response += 'Sheet:' + s.name + '<br>' for row in range(s.nrows): values = [] for col in range(s.ncols): value = s.cell(row, col).value if (value): values.append(str(value) + " not empty") else: values.append("Value at " + col + ", " + row + " was empty") response += str(values) + "<br>" 

你必须先打电话给你的第一个url。 它似乎设置了一个cookie或类似的东西。 然后调用第二个下载excel文件。 对于这样的工作,你应该更喜欢http://docs.python-requests.org/en/latest/# ,因为它比标准的lib工具更容易使用,它处理特殊的情况(如cookies)好得多默认。

 import requests s = requests.Session() s.get('http://www.sicom.gov.co/precios/controller?accion=Home&option=SEARCH_PRECE') response = s.get('http://www.sicom.gov.co/precios/controller?accion=ExportToExcel') with file('out.xls','wb') as f: f.write(response.content)