我正在尝试编写一个脚本来测试网页是否存在,如果不下载整个页面就会检查它会很好。
这是我的跳跃点,我已经看到多个示例以相同的方式使用httplib,但是,我检查的每个站点都返回false。
import httplib
from httplib import HTTP
from urlparse import urlparse
def checkUrl(url):
p = urlparse(url)
h = HTTP(p[1])
h.putrequest('HEAD', p[2])
h.endheaders()
return h.getreply()[0] == httplib.OK
if __name__=="__main__":
print checkUrl("http://www.stackoverflow.com") # True
print checkUrl("http://stackoverflow.com/notarealpage.html") # False
有什么想法吗?
修改
有人建议这样做,但他们的帖子被删除了.. urllib2是否避免下载整个页面?
import urllib2
try:
urllib2.urlopen(some_url)
return True
except urllib2.URLError:
return False
答案 0 :(得分:22)
怎么样:
import httplib
from urlparse import urlparse
def checkUrl(url):
p = urlparse(url)
conn = httplib.HTTPConnection(p.netloc)
conn.request('HEAD', p.path)
resp = conn.getresponse()
return resp.status < 400
if __name__ == '__main__':
print checkUrl('http://www.stackoverflow.com') # True
print checkUrl('http://stackoverflow.com/notarealpage.html') # False
这将发送HTTP HEAD请求,并且如果响应状态代码是&lt;则返回True。 400.
答案 1 :(得分:9)
使用requests
,这很简单:
import requests
ret = requests.head('http://www.example.com')
print(ret.status_code)
这只会加载网站的标题。要测试这是否成功,您可以检查结果status_code
。或者使用raise_for_status
方法,如果连接不成功,则会引发Exception
。
答案 2 :(得分:3)
这个怎么样。
import requests
def url_check(url):
#Description
"""Boolean return - check to see if the site exists.
This function takes a url as input and then it requests the site
head - not the full html and then it checks the response to see if
it's less than 400. If it is less than 400 it will return TRUE
else it will return False.
"""
try:
site_ping = requests.head(url)
if site_ping.status_code < 400:
# To view the return status code, type this : **print(site.ping.status_code)**
return True
else:
return False
except Exception:
return False
答案 3 :(得分:-2)
你可以尝试
import urllib2
try:
urllib2.urlopen(url='https://someURL')
except:
print("page not found")