Не используйте регулярные выражения для анализа HTML. Используйте настоящий парсер.
Я предлагаю использовать парсер lxml.html
. lxml
поддерживает xpath , который является очень мощным способом запроса структурированных документов. Есть готовый к использованию метод make_links_absolute()
, который делает то, что вы просите. Это также очень быстро.
Например, на странице этого вопроса исходный код HTML (тот, который вы сейчас читаете) содержит следующую часть:
<li><a id="nav-tags" href="/tags">Tags</a></li>
Выражение xpath //a[@id='nav-tags']/@href
означает: «Получите мне атрибут href
всех тегов <a>
с атрибутом id
, равным nav-tags
» . Давайте использовать это:
from lxml import html
url = '/2726421/url-adres-python-regulyarnoe-vyrazhenie'
doc = html.parse(url).getroot()
doc.make_links_absolute()
links = doc.xpath("//a[@id='nav-tags']/@href")
print links
Результат:
['http://stackoverflow.com/tags']