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?
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')
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
- informatif2xx
- succès3xx
- redirection4xx
- erreur du client5xx
- erreur de serveurSi 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.
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
code:
a="http://www.example.com"
try:
print urllib.urlopen(a)
except:
print a+" site does not exist"
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)
def isok(mypath):
try:
thepage = urllib.request.urlopen(mypath)
except HTTPError as e:
return 0
except URLError as e:
return 0
else:
return 1