这个问题在SO上已被问过几次,但我无法得到任何正确的答案。我需要在href链接和纯文本中提取页面中的所有URL。我不需要正则表达式的各个组。我需要一个字符串列表,即页面中的URL。有人能指出我一个好的工作榜样吗?
我想用Regexs而不是BeautifulSoup等来做这个。
谢谢。
答案 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