Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过url直接使用python从imgur下载文件_Python_Bash_Imgur - Fatal编程技术网

通过url直接使用python从imgur下载文件

通过url直接使用python从imgur下载文件,python,bash,imgur,Python,Bash,Imgur,有时,指向imgur的链接不带文件扩展名。例如:http://imgur.com/rqCqA。我想下载这个文件并给它一个已知的名称,或者在一个更大的代码中得到它的名称。问题是我不知道文件类型,所以我不知道应该给它什么扩展名 如何在python或bash中实现这一点?您可以使用BeautifulSoup或类似工具解析页面的源代码,并在src中查找带有照片哈希的img标记。以你的例子来说,图片是 <img alt="" src="http://i.imgur.com/rqCqA.jpg" or

有时,指向imgur的链接不带文件扩展名。例如:
http://imgur.com/rqCqA
。我想下载这个文件并给它一个已知的名称,或者在一个更大的代码中得到它的名称。问题是我不知道文件类型,所以我不知道应该给它什么扩展名


如何在python或bash中实现这一点?

您可以使用BeautifulSoup或类似工具解析页面的源代码,并在src中查找带有照片哈希的img标记。以你的例子来说,图片是

<img alt="" src="http://i.imgur.com/rqCqA.jpg" original-title="">

我刚刚尝试转到以下URL:

他们都工作了。Imgur似乎存储了几种类型的相同图像-您可以选择。

您应该使用。下面是Python中的一个示例,使用:


我以前用它下载了大量xkcd网络漫画,它似乎也适用于


希望这有帮助

难道mimetype不是text/html,因为链接是页面,而不是图像吗?我认为这行不通。它实际上是
(无,无)
它实际上只存储JPEG,并且依赖浏览器(正确地)忽略文件扩展名并使用mime类型。你应该使用i.imgur.com而不是imgur.com来制作图像-虽然它可以工作,但不能保证继续工作,因为它们从不提供这些链接。使用
wb
而不是
w
会有什么不同吗?虽然输出结果是一样的。我没有用
wb
尝试过,但我无法想象它会损害进程使用
r.json
而不是
json.loads(r.content.decode('utf-8'))
。另外
posixpath.basename(urlparse.urlspit(img\u url.path)
你说得对;我只是复制粘贴了一些用于旧版本请求的代码。谢谢你的
urlspit
提示。@Schnouki我收到这个错误:{“数据”:{“错误”:“你正在使用的Imgur API版本不再可用”},“成功”:false,“状态”:410}
import posixpath
import urllib.parse
import requests

url = "http://api.imgur.com/2/image/rqCqA.json"
r = requests.get(url)
img_url = r.json["image"]["links"]["original"]
fn = posixpath.basename(urllib.parse.urlsplit(img_url).path)

r = requests.get(img_url)
with open(fn, "wb") as f:
    f.write(r.content)
def saveImage(url, fpath):
    contents = urllib2.urlopen(url)
    f = open(fpath, 'w')
    f.write(contents.read())
    f.close()