Как насчет более прямой обработки href's?
re_href = re.compile(r"""<\s*a(?:[^>]+?)href=("[^"]*(\\"[^"]*)*"|'[^']*(\\'[^']*)*'|[^\s>]*)[^>]*>""", re.I)
Это занимает около 0,007 секунды по сравнению с findall
, что на моем компьютере занимает 38,694 секунды.