文字列を「有効な」URLとして検証する正気な方法を見つけようとして、このページにアクセスしました。ここでは、python3を使用して私のソリューションを共有します。追加のライブラリは必要ありません。
https://docs.python.org/2/library/urlparse.htmlを参照してくださいpython2を使用している場合は、 //docs.python.org/2/library/urlparse.htmlを。
私と同じようにpython3を使用している場合は、https: //docs.python.org/3.0/library/urllib.parse.htmlを参照してください。
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(scheme = ''、netloc = ''、path = 'dkakasdkjdjakdjadjfalskdjfalk'、params = ''、query = ''、fragment = '')
ParseResult(scheme = 'https'、netloc = 'stackoverflow.com'、path = ''、params = ''、query = ''、fragment = '')
'dkakasdkjdjakdjadjfalskdjfalk'文字列にはスキームもネットロックもありません。
' https://stackoverflow.com 'はおそらく有効なURLです。
次に、より簡潔な関数を示します。
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])