Ich bin auf dieser Seite gelandet und habe versucht, einen vernünftigen Weg zu finden, um Zeichenfolgen als "gültige" URLs zu validieren. Ich teile hier meine Lösung mit Python3. Keine zusätzlichen Bibliotheken erforderlich.
Siehe https://docs.python.org/2/library/urlparse.html, wenn Sie python2 verwenden.
Siehe https://docs.python.org/3.0/library/urllib.parse.html, wenn Sie python3 so verwenden, wie ich es bin.
import urllib
from pprint import pprint
invalid_url = 'dkakasdkjdjakdjadjfalskdjfalk'
valid_url = 'https://stackoverflow.com'
tokens = [urllib.parse.urlparse(url) for url in (invalid_url, valid_url)]
for token in tokens:
pprint(token)
min_attributes = ('scheme', 'netloc') # add attrs to your liking
for token in tokens:
if not all([getattr(token, attr) for attr in min_attributes]):
error = "'{url}' string has no scheme or netloc.".format(url=token.geturl())
print(error)
else:
print("'{url}' is probably a valid url.".format(url=token.geturl()))
ParseResult (Schema = '', Netloc = '', Pfad = 'dkakasdkjdjakdjadjfalskdjfalk', params = '', query = '', fragment = '')
ParseResult (Schema = 'https', Netloc = 'Stackoverflow.com', Pfad = '', Parameter = '', Abfrage = '', Fragment = '')
Die Zeichenfolge 'dkakasdkjdjakdjadjfalskdjfalk' hat kein Schema oder Netloc.
' https://stackoverflow.com ' ist wahrscheinlich eine gültige URL.
Hier ist eine präzisere Funktion:
from urllib.parse import urlparse
min_attributes = ('scheme', 'netloc')
def is_valid(url, qualifying=min_attributes):
tokens = urlparse(url)
return all([getattr(tokens, qualifying_attr)
for qualifying_attr in qualifying])