使用Python 3从web服务下载CSV

使用Python 3从web服务下载CSV,python,web-services,python-3.x,csv,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&a

我正在尝试使用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)
但我得到了一个错误:

回溯(最近一次调用):文件“”,第1行,在 html=response.read()AttributeError:'Request'对象没有属性'read'

怎么了?如果我对静态文件路径使用相同的代码,它可以工作,但对web服务不起作用


我不认为这是一个重复的问题,因为这是关于PDF和如何管理PDF的问题,而不是关于CSV和如何下载的问题。

我不是
urllib
包的经常用户,我倾向于使用
请求,这就是。但只有通过阅读这篇关于
urllib
的文章,我才能看到您正试图
请求
的实例中读取
,这会给出您看到的错误。相反,您应该从
响应
中读取,而这反过来又会从打开请求中得到

下面的代码片段是对我提供的链接中的官方示例的简单修改,也就是说,我没有尝试过,这里只是为了说明我的观点。我认为它应该给你一些可以合作的东西

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

我不是
urllib
包的经常用户,我倾向于使用
请求
,也就是说。但只有通过阅读这篇关于
urllib
的文章,我才能看到您正试图
请求
的实例中读取
,这会给出您看到的错误。相反,您应该从
响应
中读取,而这反过来又会从打开请求中得到

下面的代码片段是对我提供的链接中的官方示例的简单修改,也就是说,我没有尝试过,这里只是为了说明我的观点。我认为它应该给你一些可以合作的东西

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

您可以使用
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')
因为您的url给了我
错误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)

您可以使用
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')
因为您的url给了我
错误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)

在浏览器中尝试url
http://www.example.com/list/export?id=list_user&distance=long
您看到没有文件。您有什么原因不能在代码中使用浏览器中使用的url,比如说
url=”http://www.example.com/list/export?id=list_user&distance=long“
。最好显示真实的url。每个页面都可能不同,可能需要不同的解决方案。@furas我用一个真实的例子编辑了这个问题。@MarcosModenesi我使用了相同的url。可能不清楚,所以我现在编辑了这个问题…希望对大家都好。在浏览器中尝试url
http://www.example.com/list/export?id=list_user&distance=long
您看到没有文件。您有什么原因不能在代码中使用浏览器中使用的url,比如说
url="http://www.example.com/list/export?id=list_user&distance=long“
。最好显示真实的url。每个页面都可以不同,可能需要不同的解决方案。@furas我用一个真实的例子编辑了这个问题。@MarcosModenesi我使用了相同的url。可能不清楚,所以现在我编辑了这个问题……希望对每个人都好。