我试图使用urllib2加载csv(在这个例子中我使用urllib2,但是当我使用pandas或者请求时会发生完全相同的错误)但是每当我尝试阅读它时,我都会得到一个[&#39 ;没有许可']错误:
导入csv import urllib2
url = 'https://...'
response = urllib2.urlopen(url)
cr = csv.reader(response)
for row in cr:
print row
我alredy使用完全相同的方法从不同的来源下载其他csv,而这个是唯一一个出现问题的方法。源是一个外部后端,可能有一些规则反对抓取某种类型,因为当我从浏览器手动使用url时,.csv下载工作正常。
以下是响应。 dict 输出,看起来也不错:
>>> response.__dict__
{'fp': <socket._fileobject object at 0x7f066c6c1ad0>, 'fileno': <bound method _fileobject.fileno of <socket._fileobject object at
0x7f066c6c1ad0>>, 'code': 200, 'read': <bound method _fileobject.read
of <socket._fileobject object at 0x7f066c6c1ad0>>, 'readlines': <bound
method _fileobject.readlines of <socket._fileobject object at
0x7f066c6c1ad0>>, 'next': <bound method _fileobject.next of
<socket._fileobject object at 0x7f066c6c1ad0>>, 'headers':
<httplib.HTTPMessage instance at 0x7f066a0b9758>, '__iter__': <bound
method _fileobject.__iter__ of <socket._fileobject object at
0x7f066c6c1ad0>>, 'url':
'https://....',
'msg': 'OK', 'readline': <bound method _fileobject.readline of
<socket._fileobject object at 0x7f066c6c1ad0>>}
修改
网址已包含用户验证,在这种情况下是静态的:
url = 'https://www.xxx.cm/admin/index.php?
editlanguage=1
&stoken=yyy
&cl=cvvcontrolpanel
&fnc=downloadExportFile
&csv_profile_id=20'
我的令牌始终相同,即使在关闭会话后,即使在我的浏览器中尝试网址,下载也能正常工作。