我正在尝试使用Python 3.5.3从Web服务下载CSV文件。但我总是收到错误。
示例
我有这个网址
http://www.imdb.com/list/export?list_id=watchlist&author_id=ur72234145
如果我用浏览器打开它,它会开始下载 watchlist.csv 文件。 我写了以下Phython代码:
import urllib
url = 'http://www.imdb.com/list/export?list_id=watchlist&author_id=ur72234145'
response = urllib.request.Request(url)
html = response.read()
with open('output.csv', 'wb') as f:
f.write(html)
但是我收到了错误:
Traceback(最近一次调用最后一次):文件“”,第1行,in html = response.read()AttributeError:'Request'对象没有属性'read'
怎么了?如果我使用与静态文件路径相同的代码,它可以工作,但它不适用于Web服务。
我不认为这是一个重复的问题,因为this是关于PDF以及如何管理PDF,而不是关于CSV以及如何下载。
答案 0 :(得分:3)
我不是urllib
套餐的常用用户,我倾向于使用requests
,HTTP for humans。但只有通过阅读urllib
关于read
的{{1}},我才能看到您正在尝试从Request
的{{1}}实例response
,这会让您看到错误。您应该从url = 'http://www.imdb.com/list/export'
values = {'list_id' : 'watchlist',
'author_id' : 'ur72234145'}
data = urllib.parse.urlencode(values)
data = data.encode('ascii') # data should be bytes
req = urllib.request.Request(url, data) # NOTE: you try to read from req
with urllib.request.urlopen(req) as response:
the_csv = response.read() # NOTE: you should read from the response,
# which is the result of opening req
开始阅读,然后从>打开请求 。
以下代码段是对我提供的链接中官方示例的简单修改,即我没有尝试过,只是在这里表明我的观点。我认为应该给你一些合作的东西。
{{1}}
答案 1 :(得分:1)
您可以使用urlretrieve
import urllib
import urllib.request
url = 'http://www.imdb.com/list/export?list_id=watchlist&author_id=ur72234145'
urllib.request.urlretrieve(url, 'output.csv')
由于您的网址为我ERROR 404
,因此使用try/except
import urllib
import urllib.request
import urllib.error
url = 'http://www.imdb.com/list/export?list_id=watchlist&author_id=ur72234145'
try:
urllib.request.urlretrieve(url, 'output.csv')
except urllib.error.HTTPError as ex:
print('Problem:', ex)