python:检查url是否存在jpg

use*_*543 30 python validation url

在python中,我如何检查以.jpg结尾的url是否存在?

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

谢谢

Mir*_*lov 35

下面的代码相当于tikiboy的答案,但是使用了一个易于使用的高级请求库.

import requests

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

print exists('http://www.fakedomain.com/fakeImage.jpg')
Run Code Online (Sandbox Code Playgroud)

requests.codes.ok平等200,所以你可以,如果你想替换的确切状态代码.

requests.head如果服务器没有响应,则可能抛出异常,因此您可能希望添加try-except结构.

此外,如果你要包括代码301302,考虑代码303也一样,特别是如果你解引用的URI是指在资源关联数据.URI可能代表某个人,但您无法下载某个人,因此服务器会使用303重定向将您重定向到描述此人的页面.


小智 33

>>> 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
Run Code Online (Sandbox Code Playgroud)

如果状态不是200,则URL中不存在该资源.这并不意味着它完全消失了.如果服务器返回301或302,则表示该资源仍然存在,但位于不同的URL.要更改处理此情况的功能,只需将状态检查行更改为return response.status in (200, 301, 302).

  • +1,虽然我想在调用`conn.request`时使用`HEAD`代替`GET`会更有效率,因为你只是检查它是否存在. (2认同)

use*_*543 7

感谢大家的所有回复,最后使用以下内容:

try:
  f = urllib2.urlopen(urllib2.Request(url))
  deadLinkFound = False
except:
  deadLinkFound = True
Run Code Online (Sandbox Code Playgroud)