Я попал на эту страницу, пытаясь найти разумный способ проверки строк как «действительных» URL-адресов. Я поделюсь здесь своим решением, используя python3. Никаких дополнительных библиотек не требуется.
См. https://docs.python.org/2/library/urlparse.html, если вы используете python2.
См. https://docs.python.org/3.0/library/urllib.parse.html, если вы используете Python3, как я.
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 (схема = '', netloc = '', путь = 'dkakasdkjdjakdjadjfalskdjfalk', params = '', query = '', фрагмент = '')
ParseResult (схема = 'https', netloc = 'stackoverflow.com', путь = '', params = '', запрос = '', фрагмент = '')
Строка 'dkakasdkjdjakdjadjfalskdjfalk' не имеет схемы или netloc.
'https://stackoverflow.com', вероятно, является действительным URL.
Вот более краткая функция:
import urllib
min_attributes = ('scheme', 'netloc')
def is_valid(url, qualifying=None):
qualifying = min_attributes if qualifying is None else qualifying
token = urllib.parse.urlparse(url)
return all([getattr(token, qualifying_attr)
for qualifying_attr in qualifying])