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
15
demandé sur some1 2011-06-24 21:07:56

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.
22
répondu Corey Goldberg 2011-06-24 17:34:22

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.

9
répondu MaxNoe 2016-04-08 17:44:28

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
3
répondu Josh 2018-01-17 02:32:24

vous pouvez essayer

import urllib2

try:
    urllib2.urlopen(url='https://someURL')
except:
    print("page not found")
-2
répondu Suliman lee 2016-04-08 18:57:28