python: 检查jpg格式的url是否存在
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结构来处理这个情况。
另外,如果你想包含状态码301
和302
,也可以考虑一下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)
。