python: 检查jpg格式的url是否存在

37 投票
11 回答
41151 浏览
提问于 2025-04-15 20:39

在Python中,我该如何检查一个以.jpg结尾的链接是否存在呢?

比如说:

http://www.fakedomain.com/fakeImage.jpg

谢谢!

11 个回答

7

感谢大家的回复,最后我使用了以下代码:

try:
  f = urllib2.urlopen(urllib2.Request(url))
  deadLinkFound = False
except:
  deadLinkFound = True
53

下面的代码和tikiboy的回答是一样的,不过它使用了一个更高级、更容易用的requests库。

import requests

def exists(path):
    r = requests.head(path)
    return r.status_code == requests.codes.ok

print exists('http://www.fakedomain.com/fakeImage.jpg')

requests.codes.ok等于200,所以如果你想的话,可以直接用这个状态码。

如果服务器没有响应,requests.head可能会抛出一个异常,所以你可能需要加一个try-except结构来处理这个情况。

另外,如果你想包含状态码301302,也可以考虑一下303,特别是当你在处理可解引用的URI时,这些URI表示的是链接数据中的资源。比如,一个URI可能代表一个人,但你不能直接下载一个人,所以服务器会把你重定向到一个描述这个人的页面,这就是303重定向的作用。

35
>>> import httplib
>>>
>>> def exists(site, path):
...     conn = httplib.HTTPConnection(site)
...     conn.request('HEAD', path)
...     response = conn.getresponse()
...     conn.close()
...     return response.status == 200
...
>>> exists('http://www.fakedomain.com', '/fakeImage.jpg')
False

如果状态码不是200,说明这个网址上的资源不存在。这并不意味着它完全消失了。如果服务器返回的是301或302,说明这个资源还在,只是换了个网址。要让这个功能能处理这种情况,只需要把状态检查的那一行改成 return response.status in (200, 301, 302)

撰写回答