如何解决AttributeError: 'tuple' 对象没有属性 'content'
我正在连接到 API,该 API 返回一个包含多条数据的 JSON 对象,并使用该数据构建一个 html 页面。我在使用 python 下载图像的本地副本并包含链接到图像的图像标签时遇到问题。当我运行代码时,我收到错误说明 AttributeError: 'tuple' object has not attribute 'content'
。我有以下代码:
import urllib.request
import json
out = open('outfile.txt','w')
link = "https://api.nasa.gov/planetary/apod?api_key="
print(link)
resp = urllib.request.urlopen(link)
data = resp.read()
print(str(data,'utf-8'))
returnjson = json.loads(data)
img_url = returnjson['url']
title = returnjson['title']
current_date = returnjson['date']
print(img_url)
print(title)
print(current_date)
resp = urllib.request.urlretrieve(img_url)
img_file_name = img_url.split('/')[-1]
with open(img_file_name,'wb') as f:
f.write(resp.content)
解决方法
urllib.request.urlretrieve 返回一个没有内容属性的元组。相反,它将内容复制到本地文件。此外,根据文档,此功能是遗留的,将来可能会被弃用。我建议遵循 urllib.request docs 中的建议,即:
建议将 Requests package 用于更高级别的 HTTP 客户端接口。
,首先,您的 API 密钥在您的问题中 - 您可能希望将其编辑掉,以免其他人使用它!
错误出现在您提供给我们的样本的最后一行
f.write(resp.content)
此时,resp
设置为 urllib.request.urlretrieve(img_url)
的响应。但是,urllib.request.urlretrieve
实际上返回一个 元组 - (filename,headers)
。 filename
是下载的资源在系统上的存储位置,headers
是请求的响应标头。
修改你的代码,我相信这可能是你想要的?
import os
#rest of your code here
(filename,headers) = urllib.request.urlretrieve(img_url)
img_file_name = img_url.split('/')[-1]
os.replace(filename,img_file_name)
编辑:os.rename
似乎不喜欢现有文件,但是 os.replace 喜欢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。