web-dev-qa-db-fra.com

Python vérifie si le site existe

Je voulais vérifier si un certain site existe, voici ce que je fais:

user_agent = 'Mozilla/20.0.1 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent':user_agent }
link = "http://www.abc.com"
req = urllib2.Request(link, headers = headers)
page = urllib2.urlopen(req).read() - ERROR 402 generated here!

Si la page n'existe pas (erreur 402 ou toute autre erreur), que puis-je faire dans la ligne page = ... pour m'assurer que la page que je suis en train de lire se ferme?

45
James Hallen

Vous pouvez utiliser la demande HEAD à la place de GET. Il ne téléchargera que l'en-tête, mais pas le contenu. Ensuite, vous pouvez vérifier l'état de la réponse à partir des en-têtes.

import httplib
c = httplib.HTTPConnection('www.example.com')
c.request("HEAD", '')
if c.getresponse().status == 200:
   print('web site exists')

ou vous pouvez utiliser urllib2

import urllib2
try:
    urllib2.urlopen('http://www.example.com/some_page')
except urllib2.HTTPError, e:
    print(e.code)
except urllib2.URLError, e:
    print(e.args)

ou vous pouvez utiliser requests

import requests
request = requests.get('http://www.example.com')
if request.status_code == 200:
    print('Web site exists')
else:
    print('Web site does not exist') 
84
Adem Öztaş

Il est préférable de vérifier que le code de statut est <400, comme cela a été fait ici . Voici ce que signifient les codes d'état (extraits de wikipedia ):

  • 1xx - informatif
  • 2xx - succès
  • 3xx - redirection
  • 4xx - erreur du client
  • 5xx - erreur de serveur

Si vous voulez vérifier si la page existe et que vous ne voulez pas télécharger la page entière, vous devez utiliser Head Request :

import httplib2
h = httplib2.Http()
resp = h.request("http://www.google.com", 'HEAD')
assert int(resp[0]['status']) < 400

tiré de cette réponse .

Si vous souhaitez télécharger la page entière, faites simplement une demande et vérifiez le code d'état. Exemple utilisant request :

import requests

response = requests.get('http://google.com')
assert response.status_code < 400

Voir aussi des sujets similaires:

J'espère que cela pourra aider.

32
alecxe
from urllib2 import Request, urlopen, HTTPError, URLError

user_agent = 'Mozilla/20.0.1 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent':user_agent }
link = "http://www.abc.com/"
req = Request(link, headers = headers)
try:
        page_open = urlopen(req)
except HTTPError, e:
        print e.code
except URLError, e:
        print e.reason
else:
        print 'ok'

Pour répondre au commentaire de unutbu:

Comme les gestionnaires par défaut gèrent les redirections (codes de la plage 300) et que les codes de la plage 100-299 indiquent un succès, vous ne verrez généralement que les codes d'erreur dans la plage 400-599 . La source

8
keas

code:

a="http://www.example.com"
try:    
    print urllib.urlopen(a)
except:
    print a+"  site does not exist"
4
Raj

Essaye celui-là:: 

import urllib2  
website='https://www.allyourmusic.com'  
try:  
    response = urllib2.urlopen(website)  
    if response.code==200:  
        print("site exists!")  
    else:  
        print("site doesn't exists!")  
except urllib2.HTTPError, e:  
    print(e.code)  
except urllib2.URLError, e:  
    print(e.args)  
0
Vishal
def isok(mypath):
    try:
        thepage = urllib.request.urlopen(mypath)
    except HTTPError as e:
        return 0
    except URLError as e:
        return 0
    else:
        return 1
0
DiegoPacheco