如何使用Python正则表达式从HTML链接中提取URL?


URL统一资源定位符的首字母缩写;它用于标识互联网上的资源位置。例如,以下URL用于标识Google和Microsoft网站的位置:

https://www.google.com
https://www.microsoft.com

URL由域名、路径、端口号等组成。可以使用正则表达式解析和处理URL。因此,如果要使用正则表达式,则必须在Python中使用re库。

示例

以下示例演示了URL:

URL: https://tutorialspoint.com/courses
If we parse the above URL we can find the website name and protocol
Hostname: tutorialspoint.com
Protocol: https

正则表达式

在Python语言中,正则表达式是一种用于查找匹配字符串的搜索模式。

Python有四种用于正则表达式的函数:

  • search() - 用于查找第一个匹配项。

  • match() - 用于查找完全相同的匹配项。

  • findall() - 用于查找所有匹配项。

  • sub() - 用于将匹配模式的字符串替换为新的字符串。

如果要使用Python语言在URL中搜索所需的模式,可以使用re.findall()函数,这是一个re库函数。

语法

以下是Python中re.findall搜索函数的语法或用法:

re.findall(regex, string)

上述语法将字符串中所有不重叠的模式匹配项作为字符串列表返回。

示例

要提取URL,可以使用以下代码:

import re
text= '<p>Hello World: </p><a href="https://tutorialspoint.com">More Courses</a><a href="https://tutorialspoint.com/market/index.asp">Even More Courses</a>'
urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', text)
print("Original string: ",text)
print("Urls:",urls)

输出

以下是上述程序执行后的输出:

Original string:  <p>Hello World: </p><a href="https://tutorialspoint.com">More Courses</a><a href="https://tutorialspoint.com/market/index.asp">Even More Courses</a>
Urls: ['https://tutorialspoint.com', 'https://tutorialspoint.com/market/index.asp']

示例

以下程序演示如何从给定的URL中提取主机名和协议。

import re  
website = 'https://tutorialspoint.com/'
#to find protocol
object1 = re.findall('(\w+)://', website)
print(object1)
# To find host name
object2 = re.findall('://www.([\w\-\.]+)', website)
print(object2)

输出

以下是上述程序执行后的输出:

['https']
['tutorialspoint.com']

示例

以下程序演示了构建路径元素的通用URL的用法。

# Online Python-3 Compiler (Interpreter)

import re

# url
url = 'https://tutorialspoint.com/index.html' 

# finding  all capture groups
object = re.findall('(\w+)://([\w\-\.]+)/(\w+).(\w+)', url)
print(object)

输出

以下是上述程序执行后的输出:

[('http', 'www.tutorialspoint.com', 'index', 'html')]

更新于:2023年10月4日

2K+ 浏览量

启动您的职业生涯

完成课程后获得认证

开始学习
广告