Python re 提取 HTML 地址

在网络爬虫和数据处理中,经常需要从 HTML 文档中提取出链接地址。Python 的 re 模块是一个强大的正则表达式工具,在处理文本匹配和提取时非常方便。本文将介绍如何使用 Python 的 re 模块提取 HTML 地址,并提供代码示例。

正则表达式基础

在使用 re 模块之前,我们需要了解一些正则表达式的基础知识。正则表达式是一种用于匹配和处理文本的字符串模式。在 Python 中,我们可以使用 re 模块来创建和应用正则表达式。

下面是一些常用的正则表达式语法:

  • .:匹配任意字符。
  • *:匹配前一个字符的零个或多个重复。
  • +:匹配前一个字符的一个或多个重复。
  • \d:匹配一个数字字符。
  • \w:匹配一个字母数字字符。
  • \s:匹配一个空白字符。
  • \b:匹配一个单词边界。

提取 HTML 地址

在 HTML 文档中,链接地址通常以<a>标签包裹,我们可以使用正则表达式来提取这些链接。下面是一个示例 HTML 文档:

<html>
<body>
<a rel="nofollow" href="
<a href="
<a href="
</body>
</html>

我们希望从这个 HTML 文档中提取出所有链接的地址。

首先,我们需要使用 re 模块的 findall 方法来匹配所有的<a>标签:

import re

html = '''
<html>
<body>
<a rel="nofollow" href="
<a href="
<a href="
</body>
</html>
'''

links = re.findall(r'<a.*?href="(.*?)".*?>', html)
print(links)

代码输出:

[' ' '

在这个例子中,我们使用了正则表达式<a.*?href="(.*?)".*?>来匹配<a>标签,并使用了.*?来匹配任意字符(非贪婪模式),"(.*?)"来提取引号之间的内容作为链接地址。

代码示例

下面是一个完整的代码示例,演示了如何使用 Python 的 re 模块提取 HTML 地址:

import re

def extract_links_from_html(html):
    pattern = r'<a.*?href="(.*?)".*?>'
    links = re.findall(pattern, html)
    return links

html = '''
<html>
<body>
<a rel="nofollow" href="
<a href="
<a href="
</body>
</html>
'''

links = extract_links_from_html(html)
print(links)

代码输出:

[' ' '

总结

本文介绍了如何使用 Python 的 re 模块提取 HTML 地址。首先,我们了解了正则表达式的基础知识,然后演示了如何使用正则表达式匹配和提取 HTML 中的链接地址。通过了解正则表达式的语法和使用 re 模块的方法,我们可以更加灵活地处理和提取文本数据。

关系图

下图是示意关系图,描述了 HTML 文档中链接地址的提取过程:

erDiagram
    HTML -- "正则表达式匹配" : 匹配 <a> 标签
    "正则表达式匹配" -- 地址 : 提取链接地址

状态图

下图是示意状态图,描述了 HTML 地址提取的状态流程:

stateDiagram
    [*] --> 提取
    提取 --> 结束 : 成功
    提取 --> [*] : 失败
    结束 --> [*]
``