Вариантов много, вот нативный код без импорта библиотек.
baseurl должен быть в полном виде с указанием протокола.
def geturl(href, baseurl):
domain = [i for i in baseurl.split('/') if i][1]
proto = [i for i in baseurl.split('/') if i][0]
protos = ['https://', 'http://', 'ftp://',]
for i in protos:
if href.startswith(i):
return href
if href.startswith('/'):
return proto + '://' + domain + href
if baseurl.endswith('/'):
return baseurl + href
return '/'.join(baseurl.split('/')[:-1]) + url