Во-первых, да, вы, вероятно, должны использовать анализатор HTML. Вот пример кода с использованием модуля HTMLParser, который поставляется с Python:
from HTMLParser import HTMLParser
class ImgSrcHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.srcs = []
def handle_starttag(self, tag, attrs):
if tag == 'img':
self.srcs.append(dict(attrs).get('src'))
parser = ImgSrcHTMLParser()
parser.feed(html)
for src in parser.srcs:
print src
Это собирает src из тегов img. Должно быть довольно легко адаптировать его к вашим целям, если вы захотите получить метку 'a', заканчивающуюся на '.mp3'.
Предполагая, что вы действительно хотите использовать регулярное выражение, есть некоторые проблемы с вашим регулярным выражением. Вы не разграничиваете URL, а используете точку внутри URL. Наихудшим побочным эффектом этого является то, что не-mp3 URL, за которым следует mp3-URL, будет рассматриваться как один длинный URL. Например: "http://foo/bar.gif snarf snarf http://baz/quux.mp3". Возможно, вы захотите потребовать какой-то разделитель (пробелы, кавычки, зависит от того, что вы делаете) и запретить некоторые символы внутри URL (вероятно, те же символы) и / или любые символы, которые не разрешены в URL). Кроме того, вы забыли экранировать «.» в «.mp3». Таким образом, «http://foo/mp3icon.gif" будет соответствовать как« http://foo/mp3".