Python - 正则表达式匹配页面源代码中的URL

时间:2017-02-09 08:53:30

标签: python regex

我使用此模式匹配给定网页中的每个网址:

import re

source = """
<p>https://example.com</p>
... some code
<font color="E80000">https://example.com</font></a>
"""

urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', source)

直到现在,这对我很有用。我发现有时它与确切的网址不匹配。就像在示例中一样,它匹配为url https://example.com</p>https://example.com</font></a>包含结束标记,但我无法弄清楚正则表达式中的问题是什么。我从另一个堆栈问题中获取了这段代码。

1 个答案:

答案 0 :(得分:0)

试试这个,

import re

source = """
<p>https://example.com</p>
... some code
<font color="E80000">https://example.com</font>
https://example.com</p></a>
https://example.com</font></a>
"""
urls = re.findall('(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?', source)
print urls