python: check if url to jpg exists
在Python中,如何检查以.jpg结尾的URL是否存在?
前任:http://www.fakedomain.com/fakeimage.jpg
谢谢
1 2 3 4 5 6 7 8 9 10 11 | >>> 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,则URL上不存在该资源。这并不意味着它已经完全消失了。如果服务器返回301或302,这意味着资源仍然存在,但位于不同的URL。为了改变处理这种情况的功能,只需要将状态检查行更改为
下面的代码相当于Tikiboy的答案,但是使用了一个高级且易于使用的请求库。
1 2 3 4 5 6 7 | import requests def exists(path): r = requests.head(path) return r.status_code == requests.codes.ok print exists('http://www.fakedomain.com/fakeImage.jpg') |
如果服务器不响应,
另外,如果要包括代码
感谢所有人的回答,最终使用了以下内容:
1 2 3 4 5 | try: f = urllib2.urlopen(urllib2.Request(url)) deadLinkFound = False except: deadLinkFound = True |
当文件位于ftp服务器(ftp://url.com/file)中时,前面的答案有问题,当文件位于ftp、http或https中时,以下代码起作用:
1 2 3 4 5 6 7 8 9 10 | import urllib2 def file_exists(url): request = urllib2.Request(url) request.get_method = lambda : 'HEAD' try: response = urllib2.urlopen(request) return True except: return False |
。
看起来
301和302响应的重定向将自动完成,而不会向用户返回任何响应。
请看一看httpredirecthandler,您可能需要子类化它来处理它。
以下是"潜入Python"中的一个示例:
http://diveintopython3.ep.io/http web services.html重定向
尝试机械化:
1 2 3 4 5 6 7 8 | import mechanize br = mechanize.Browser() br.set_handle_redirect(False) try: br.open_novisit('http://www.fakedomain.com/fakeImage.jpg') print 'OK' except: print 'KO' |
号
在python 3.6.5中:
1 2 3 4 5 6 7 8 9 10 | import http.client def exists(site, path): connection = http.client.HTTPConnection(site) connection.request('HEAD', path) response = connection.getresponse() connection.close() return response.status == 200 exists("www.fakedomain.com","/fakeImage.jpg") |
。
在python 3中,模块
您需要从URL中删除
这可能足够好,可以查看文件的URL是否存在。
1 2 3 | import urllib if urllib.urlopen('http://www.fakedomain.com/fakeImage.jpg').code == 200: print 'File exists' |
。
我认为您可以尝试向URL发送一个HTTP请求并读取响应。如果没有捕获到异常,则可能存在异常。