使用Python 3从Web服务下载CSV

时间:2017-02-02 00:14:55

标签: python web-services python-3.x csv

我正在尝试使用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以及如何下载。

2 个答案:

答案 0 :(得分:3)

我不是urllib套餐的常用用户,我倾向于使用requestsHTTP 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)