从网页提取所有URL的正则表达式
这个问题在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