Реконструкция абсолютных URL-адресов от относительных URL-адресов на странице

Учитывая абсолютный URL-адрес страницы и относительную ссылку, найденную на этой странице, существует ли способ: a) окончательно восстановить или b) лучше всего восстановить абсолютный URL-адрес относительной ссылки?

В моем случае я читаю html-файл с данного URL-адреса, используя красивый суп, удаляя все источники тегов img и пытаясь составить список абсолютных URL-адресов для изображений страниц.

Моя функция Python выглядит так:

function get_image_url(page_url,image_src): from urlparse import urlparse # parsed = urlparse('http://user:pass@NetLoc:80/path;parameters?query=argument#fragment') parsed = urlparse(page_url) url_base = parsed.netloc url_path = parsed.path if src.find('http') == 0: # It's an absolute URL, do nothing. pass elif src.find('/') == 0: # If it's a root URL, append it to the base URL: src = 'http://' + url_base + src else: # If it's a relative URL, ? 

ПРИМЕЧАНИЕ. Не нужно отвечать на Python, только требуемая логика.

    2 Solutions collect form web for “Реконструкция абсолютных URL-адресов от относительных URL-адресов на странице”

    очень просто:

     >>> from urlparse import urljoin >>> urljoin('http://mysite.com/foo/bar/x.html', '../..http://img.rupython.com/pythonimg.png') 'http://mysite.comhttp://img.rupython.com/pythonimg.png' 

    Используйте urllib.parse.urljoin для разрешения (возможно, относительного) URL-адреса по отношению к базовому URL-адресу.

    Но базовый URL-адрес веб-страницы не обязательно совпадает с URL-адресом, из которого вы извлекаете документ, потому что HTML позволяет странице указать свой предпочтительный базовый URL-адрес через элемент BASE . Необходимая логика такова:

     base_url = page_url head = document.getElementsByTagName('head')[0] for base in head.getElementsByTagName('base'): if base.hasAttribute('href'): base_url = urllib.parse.urljoin(base_url, base.getAttribute('href')) # HTML5 4.2.3 "if there are multiple base elements with href # attributes, all but the first are ignored." break 

    (Если вы разбираете XHTML, тогда в теории вы должны принять во внимание довольно волосатую спецификацию базы данных XML, но вы, вероятно, можете уйти, не беспокоясь об этом, поскольку никто не использует XHTML.)

    Python - лучший язык программирования в мире.