Python script pour voir si une page Web existe sans télécharger la page entière?
j'essaie d'écrire un script pour tester l'existence d'une page web, ce serait bien s'il vérifiait sans télécharger la page entière.
c'est mon point de départ, j'ai vu plusieurs exemples utiliser httplib de la même manière, cependant, chaque site que je vérifie renvoie simplement 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
des idées?
Modifier
Quelqu'un a suggéré cela, mais leur poste a été supprimé.. ne urllib2 éviter de télécharger toute la page?
import urllib2
try:
urllib2.urlopen(some_url)
return True
except urllib2.URLError:
return False
4 réponses
que pensez-vous de ceci:
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
cette option envoie une requête HTTP HEAD et renvoie True si le code d'état de la réponse est < 400.
- notez que le chemin root de StackOverflow renvoie une redirection (301), pas un 200 OK.
par requests
, c'est aussi simple que:
import requests
ret = requests.head('http://www.example.com')
print(ret.status_code)
cela charge juste l'en-tête du site. Pour tester si c'était réussi, vous pouvez vérifier les résultats status_code
. Ou utilisez la méthode raise_for_status
qui élève un Exception
si la connexion n'a pas été réussie.
que dis-tu de ça?
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
vous pouvez essayer
import urllib2
try:
urllib2.urlopen(url='https://someURL')
except:
print("page not found")