web-dev-qa-db-fra.com

Validation des URL en Python

J'ai essayé de déterminer le meilleur moyen de valider une URL (en particulier en Python), mais je n'ai pas vraiment trouvé de réponse. Il semble qu’il n’existe pas de moyen connu de valider une URL, et cela dépend des URL que vous pensez devoir valider. De plus, j'ai trouvé difficile de trouver un standard facile à lire pour la structure des URL. J'ai trouvé les RFC 3986 et 3987, mais ils contiennent beaucoup plus que leur structure.

Est-ce que quelque chose me manque ou n'y a-t-il pas un moyen standard de valider une URL?

10
mp94

Cela ressemble à une copie de Comment valider une URL avec une expression régulière en Python?

Vous devriez pouvoir utiliser la bibliothèque urlparse décrite ici.

>>> from urllib.parse import urlparse # python2: from urlparse import urlparse
>>> urlparse('actually not a url')
ParseResult(scheme='', netloc='', path='actually not a url', params='', query='', fragment='')
>>> urlparse('http://google.com')
ParseResult(scheme='http', netloc='google.com', path='', params='', query='', fragment='')

appelez urlparse sur la chaîne que vous souhaitez vérifier, puis assurez-vous que la ParseResult a des attributs pour scheme et netloc

17
bgschiller

La question initiale est un peu ancienne, mais vous voudrez peut-être aussi consulter la bibliothèque Validator-Collection que j'ai publiée il y a quelques mois. Il comprend une validation très performante des URL basée sur regex pour la conformité au standard RFC. Quelques détails:

  • Testé contre Python 2.7, 3.4, 3.5, 3.6
  • Aucune dépendance sur Python 3.x, une dépendance conditionnelle dans Python 2.x (remplacement immédiat du module buggy re de Python 2.x)
  • Tests unitaires couvrant environ 80 modèles d'URL successifs/défaillants différents, y compris des caractères non standard et similaires. Aussi proche de couvrir tout le spectre de la norme RFC que j'ai pu trouver.

C'est aussi très facile à utiliser:

from validator_collection import validators, checkers

checkers.is_url('http://www.stackoverflow.com')
# Returns True

checkers.is_url('not a valid url')
# Returns False

value = validators.url('http://www.stackoverflow.com')
# value set to 'http://www.stackoverflow.com'

value = validators.url('not a valid url')
# raises a validator_collection.errors.InvalidURLError (which is a ValueError)

En outre, Validator-Collection inclut environ 60 autres validateurs, y compris les domaines et les adresses électroniques, afin que les utilisateurs puissent trouver quelque chose d’utile.

5
Chris Modzelewski

vous pouvez également essayer d'utiliser urllib.request pour valider en passant l'URL dans la fonction urlopen et en capturant l'exception pour URLError

from urllib.request import urlopen, URLError

def validate_web_url(url="http://google"):
    try:
        urlopen(url)
        return True
    except URLError:
        return False

Ce serait return False dans ce cas

1
Hamza

Je voudrais utiliser le package de validateurs. Voici le lien link vers la documentation et les instructions d’installation.

C'est aussi simple que 

import validators
url = 'YOUR URL'
validators.url(url)

Il retournera vrai si c'est le cas et faux sinon.

0
Tony Hammack