from urllib.parse import urlsplit
WWW_PREFIX = 'www.'
[docs]
def extract_domain(url: str, strip_www: bool = False) -> str:
    """
    Extracts a domain from the given URL.
    :param url: Input URL.
    :param strip_www: Should we strip the leading ``www.`` from the domain?
    :return: Domain.
    """
    values = urlsplit(url)
    if not values.scheme and not values.hostname and values.path and values.path[0] != '/':
        values = urlsplit(f'//{url}')
    if values.hostname:
        domain = values.hostname
    else:
        raise ValueError(f'URL {repr(url)} is malformed, the domain could not be extracted.')
    if strip_www and domain.startswith(WWW_PREFIX):
        domain = domain[len(WWW_PREFIX) :]
    return domain