Python Can';t使用urllib2下载整个文件

Python Can';t使用urllib2下载整个文件,python,excel,urllib2,Python,Excel,Urllib2,嗨,我正试图从这个url()下载一个excel文件,然后我需要使用xlrd解析它 问题是,当我把这个Url放在浏览器上时,我会得到一个大约2MB的excel文件,但当我从命令行使用urllib2、http2lib甚至curl下载该文件时,我只得到一个4k文件,显然,解析这个不完整的文件失败得很惨 奇怪的是,xlrd似乎能够从下载的文件中读取正确的工作表名称,所以我猜该文件是正确的,但显然是不完整的 下面是我试图实现的一些示例代码 import urllib2 from xlrd import o

嗨,我正试图从这个url()下载一个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>"
导入urllib2
从xlrd导入打开的\u工作簿
excel\u url='1〕http://www.sicom.gov.co/precios/controller?accion=ExportToExcel'
结果=urllib2.urlopen(excel_url)
wb=打开\u工作簿(文件\u内容=result.read())
response=“”
对于wb.sheets()中的s:
响应+='工作表:'+s.name+'
' 对于范围内的行(s.nrows): 值=[] 对于范围内的列(s.ncols): value=s.单元格(行、列).value 如果(值): values.append(str(value)+“notempty”) 其他: values.append(“位于“+col+”、“+row+”的值为空”) 响应+=str(值)+“

您必须先调用您的第一个url。好像是放了块饼干之类的东西。然后调用第二个来下载excel文件。对于这类工作,您应该更喜欢它,因为它比标准的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)

如果我将该链接粘贴到浏览器中,我只会得到一个名为
controller
的文件,该文件的大小为4.1KB。@jucas您可能在该服务器上有一个会话,它会向您发送一个与我们不同的文件。您可能必须登录网站才能访问该文件,对吗?这就是为什么您无法从脚本中获取它。@jramirez谢谢!实际上我不需要登录,这是一个公共网站(),从那里我只需点击excel图标并复制从打开的窗口中获得的链接。有趣的是,当我在常规Chrome窗口上尝试url时,我得到了2MB excel文件,但当我打开一个新的Incognito窗口并粘贴完全相同的url时,我得到了4K文件。我猜当我从我的常规chrome窗口访问链接时,会传递一些隐藏的参数/cookie,这在匿名模式或我的浏览器中不起作用script@LutzHorn我认为你是对的!如何从我的脚本中模拟类似的会话,或者至少如何看到我正在使用的会话参数?