我想从reddit和imgur中获取直接图片链接,将它们保存到文件中,然后将它们上传到twitter。我没有真正的理由这样做,我只是想要练习,因为我是编程新手。我不确定如何将图像链接保存到文件。我遇到了一个StackOverflow问题,问了同样的问题,给出的答案是使用urllib.retrieve
。
这是我正在使用的代码:
def post_to_twitter():
if 'i.redd.it/' in submission.url or 'i.imgur.com/' in submission.url:
print(submission.url)
urllib.urlretrieve(str(submission.url),'<my directory>')
elif 'i.redd.it/' not in submission.url or 'i.imgur.com/' not in submission.url:
print('No direct imgur or reddit image link')
但是,当我运行此代码时,我收到一个我之前从未遇到的unicode错误 - (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
然后IDLE突出显示我在提交URL和我选择的目录之间使用的逗号。
显然这是错误的代码,我确信使用图像链接保存到文件并不像使用单行代码那么容易。我做错了什么,或者只是有更好的方法来做到这一点?如果可能的话,你能解释一下我是五岁吗?我是编程新手,不懂一些让我困惑的词。
我找到了解决方案。
我实际上设法使用我使用的原始代码,但略有调整。
我用过:
urllib.request.urlretrieve(submission.url, 'Reddit To Twitter Downloaded Images\\'+submission.id+'.jpeg')
submission.url
返回图像的链接,因此您可以将其替换为您想要的任何内容,只要它与字符串中的直接图像链接相同,例如my_url = "http://i.imgur.com/qjMiF2A.gif"
'Reddit To Twitter Downloaded Images\\'+submission.id+'.jpeg'
是您要保存的图片的名称。您还可以在其中指定路径。但是,因为我无法手动指定我想要保存文件的内容,所以我使用submission.id作为文件名,这样我就可以保证它始终是唯一的。然后我在其末尾添加.jpeg
以指定文件类型。
答案 0 :(得分:0)
试试这个:
import os
import urllib.request
import urllib.error
def saveImg(url,path,name):
#url is imgurl
#path is your folder
#name is like tmp.png
if not os.path.exists(path):
os.mkdir(path)
try:
response=urllib.request.urlopen(url);
except urllib.error.URLError as e:
return 0
except urllib.error.HTTPError as e:
return 0
code=response.read()
filehandle=open(path+name,'wb');
filehandle.write(code)
filehandle.close()
return 1
答案 1 :(得分:0)
您需要先点击PIL
和Requests
最干净的方式是
from PIL import Image
import requests
from io import BytesIO
r=requests.get(name)
image=Image.open(BytesIO(r.content))
image.save('{0}.jpg'.format("Image"))
答案 2 :(得分:0)
我实际上设法使用我使用的原始代码,但略有调整。
我用过:
urllib.request.urlretrieve(submission.url, 'Reddit To Twitter Downloaded Images\\'+submission.id+'.jpeg')
submission.url
返回图像的链接,因此您可以将其替换为您想要的任何内容,只要它与字符串中的直接图像链接相同即可。
'Reddit To Twitter Downloaded Images\\'+submission.id+'.jpeg'
是您要保存的图片的名称。您还可以在其中指定路径。但是,因为我无法手动指定我想要保存文件的内容,所以我使用submission.id作为文件名,这样我就能保证它始终是唯一的。然后我在其末尾添加.jpeg
以指定文件类型。