正则表达式从页面中提取所有URL

时间:2011-01-14 21:59:06

标签: python regex

这个问题在SO上已被问过几次,但我无法得到任何正确的答案。我需要在href链接和纯文本中提取页面中的所有URL。我不需要正则表达式的各个组。我需要一个字符串列表,即页面中的URL。有人能指出我一个好的工作榜样吗?

我想用Regexs而不是BeautifulSoup等来做这个。

谢谢。

2 个答案:

答案 0 :(得分:3)

HTML不是regular language,因此无法通过正则表达式进行解析。

可以使用正则表达式进行合理的猜测和/或识别URI的受限子集,但这种方式是疯狂的(冗长的调试过程,不准确的结果)。

也就是说,如果您愿意走这条路,请参阅John Gruber's regex for the purpose

def extract_urls(your_text):
  url_re = re.compile(r'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))')
  for match in url_re.finditer(your_text):
    yield match.group(0)

可以使用如下:

>>> for uri in extract_urls('http://foo.bar/baz irc://freenode.org/bash'):
...   print uri
http://foo.bar/
irc://freenode.org

答案 1 :(得分:0)

我知道您可以使用PHP中的DOM对象来解析HTML文档。我不熟悉python,但这可能会有所帮助:http://docs.python.org/library/xml.dom.html