您好我正在尝试从此网址(http://www.sicom.gov.co/precios/controller?accion=ExportToExcel)下载excel文件,然后我需要使用xlrd解析它。
问题是,当我将这个Url放在浏览器上时,我得到一个或多或少2MB的excel文件,但是当我使用urllib2,http2lib甚至curl从命令行下载文件时,我只得到一个4k文件,显然解析那个不完整的文件失败了。
奇怪的是,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>"
答案 0 :(得分:2)
你必须先打电话给你的第一个网址。它似乎设置了一个cookie或类似的东西。然后调用第二个来下载excel文件。对于这类工作,您应该更喜欢http://docs.python-requests.org/en/latest/#,因为它比标准的lib工具更容易使用,并且它在默认情况下处理特殊情况(如cookie)要好得多。
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)