Python script, чтобы увидеть, существует ли веб-страница без скачивания всей страницы?
Я пытаюсь написать script для проверки наличия веб-страницы, было бы неплохо, если бы он проверял, не загружая всю страницу.
Это моя прыгающая точка, я видел, что несколько примеров используют 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
Ответы
Ответ 1
как насчет этого:
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 и вернет True, если код состояния ответа равен < 400.
- обратите внимание, что корневой путь StackOverflow возвращает перенаправление (301), а не 200 OK.
Ответ 2
Используя requests
, это так же просто, как:
import requests
ret = requests.head('http://www.example.com')
print(ret.status_code)
Это просто загружает заголовок веб-сайта. Чтобы проверить, успешно ли это, вы можете проверить результаты status_code
. Или используйте метод raise_for_status
, который вызывает Exception
, если соединение не было успешным.
Ответ 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 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
Ответ 4
Вы можете попробовать
import urllib2
try:
urllib2.urlopen(url='https://someURL')
except:
print("page not found")