从网页提取所有URL的正则表达式

0 投票
2 回答
1666 浏览
提问于 2025-04-16 09:59

这个问题在StackOverflow上问过几次了,但我找不到能正确工作的答案。我需要从网页中提取所有的URL,包括在链接中的和纯文本中的。我不需要正则表达式的单独分组,只需要一个字符串列表,也就是网页中的URL。有没有人能给我一个好用的例子?

我想用正则表达式来实现,而不是使用BeautifulSoup等工具。

谢谢。

2 个回答

0

我知道你可以在PHP中使用DOM对象来解析HTML文档。我对Python不太熟悉,但这个链接可能对你有帮助:http://docs.python.org/library/xml.dom.html

3

HTML 不是一种 常规语言,所以用常规表达式是无法解析它的。

虽然可以用常规表达式做一些 合理的猜测,或者识别一小部分的 URI,但这样做会让人很头疼(调试过程会很漫长,结果也可能不准确)。

不过,如果你愿意尝试这种方法,可以看看 John Gruber 为这个目的写的正则表达式

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

撰写回答