项目六:学会如何使用python爬虫解析库(小白小成级)

在上一篇我们学习re模块的三个函数用法,这一次我们在继续学一下另外两个函数的用法,就当我们修炼境界一样去不断的升级。好了,我们来学习re.compile 函数和re.split函数的用法

友情提示:忘了复习一下项目五:学会如何使用python爬虫解析库(小白小成级)-CSDN博客

re.compile ()

简介

re.compile() 是 Python re 模块中的一个函数,它用于编译一个正则表达式模式,将其转换为一个正则表达式对象(RegexObject

这样做的好处是可以提高效率,特别是当你需要多次使用同一个正则表达式进行匹配时。编译后的正则表达式对象可以用于匹配字符串,并且提供了更多的方法,如 search()match()findall() 等。

作用
  • 性能提升:编译后的正则表达式可以重复使用,避免了每次匹配时重新解析正则表达式的开销。
  • 灵活性:编译后的正则表达式对象可以用于更复杂的文本处理,如使用捕获组、查找多个匹配项等。
  • 正则表达式重用:当你需要在程序的不同部分使用相同的正则表达式时,编译并保存正则表达式对象可以避免重复编译。
语法
re.compile(pattern, flags=0)

代码解释

  • pattern:要编译的正则表达式模式,可以是一个字符串或正则表达式对象。
  • flags:可选参数,用于修改正则表达式的匹配方式。
    • re.IGNORECASE 或 re.I:忽略大小写。
    • re.MULTILINE 或 re.M:多行匹配。
    • re.DOTALL 或 re.S:点号(.)匹配所有字符,包括换行符。
    • re.UNICODE 或 re.U:使 \w\W\b\B\d\D\s 和 \S 依赖于 Unicode 字符属性数据库。
    • re.VERBOSE 或 re.X:允许使用更易于阅读的正则表达式,忽略空格和注释。
案例

编译正则表达式并使用

import re

# 编译一个正则表达式,用于匹配一个或多个数字
pattern = re.compile(r'\d+')

# 使用编译后的正则表达式对象的 search 方法
text = "There are 123 apples and 456 oranges."
match = pattern.search(text)

if match:
    print("找到数字序列:", match.group())
else:
    print("没有找到数字序列")

输出结果

在这个例子中,我们首先使用 re.compile() 编译了一个用于匹配数字序列的正则表达式。然后,我们使用编译后的正则表达式对象的 search() 方法在文本中搜索第一个匹配的数字序列。

其他方法案例例如 search()match()findall() 等如下(选用一个)

使用正则表达式对象的 finditer 方法

import re

# 编译一个正则表达式,用于匹配所有数字
pattern = re.compile(r'\d+')

# 使用 finditer 方法查找所有匹配的数字
text = "Today is 04/01/2023 and the temperature is 20°C."
for match in pattern.finditer(text):
    print("找到数字:", match.group())

输出结果

在这个例子中,我们使用 finditer() 方法找到了文本中的所有数字序列。finditer() 返回一个迭代器,每个迭代项都是一个 Match 对象,包含了匹配的详细信息。

编译正则表达式对象提供了一种高效和灵活的方式来处理文本匹配,特别是在需要重复使用同一个正则表达式模式时。

re.split()

简介

re.split() 是 Python re(正则表达式)模块中的一个函数,它使用正则表达式来分割字符串。

这个函数可以根据匹配正则表达式的模式来分割字符串,返回一个包含所有分割部分的列表

作用
  • 主要用于将字符串分割成多个子字符串,分割点由正则表达式定义的模式确定。
  • 可以处理复杂的分割任务,如分割 HTML 或 CSV 数据,或者根据特定字符集分割文本。
语法
re.split(pattern, string, maxsplit=0, flags=0)
  • pattern:要使用的正则表达式模式,用于定义分割点
  • string:需要被分割的原始字符串。
  • maxsplit(可选)一个整数,指定最大分割次数。默认为 0,表示没有限制分割次数。
  • flags(可选)用于修改正则表达式的匹配方式的标志。
案例

1.分割字符串

import re

# 使用空白字符分割字符串
result = re.split(r'\s+', 'One two\tthree\nfour')
print(result)  # 输出: ['One', 'two', 'three', 'four']

# 使用逗号分割字符串,忽略空白字符
result = re.split(r',\s*', 'One, two, three, four')
print(result)  # 输出: ['One', 'two', 'three', 'four']

输出结果

在这个例子中,我们使用 re.split() 函数来分割字符串。第一个案例中,我们使用一个或多个空白字符(包括空格、制表符和换行符)作为分割点。

2.分割字符串并限制次数

import re

# 使用冒号分割字符串,但只分割前两次
result = re.split(r':', 'key1:value1:key2:value2:key3', maxsplit=2)
print(result)  # 输出: ['key1', 'value1', 'key2:value2:key3']

输出结果

第二个案例中,我们使用逗号作为分割点,并通过 \s* 匹配跟随逗号的任意数量的空白字符。

在这个案例中,我们使用 maxsplit 参数来限制分割次数,这样只会分割前两次冒号,返回的列表中包含了剩余未分割的部分。

re.split() 是一个强大的工具,它提供了比基本字符串操作更复杂的分割功能,允许你根据正则表达式模式来分割文本。

简单项目应用

re.split()re.compile() 可以结合使用来执行更复杂的文本分割任务。以下是两个函数的项目案例使用:

案例 1:使用 re.split() 分割 HTML 标签和文本

假设你有一个 HTML 字符串,你想要分割它以提取纯文本内容。

import re

html_content = '<html><head><title>Test</title></head><body><p>Some text</p></body></html>'

# 编译一个正则表达式,用于匹配 HTML 标签
tag_pattern = re.compile(r'<[^>]+>')

# 使用 re.split() 分割 HTML 标签和文本
text_parts = tag_pattern.split(html_content)

# 打印文本部分
for part in text_parts:
    if part.strip():  # 确保不打印空字符串
        print(part)

输出结果

在这个案例中,我们首先使用 re.compile() 编译一个正则表达式,该表达式匹配任何 HTML 标签。然后,我们使用 re.split() 根据这个模式来分割 HTML 字符串,得到一个包含文本部分的列表。

案例 2:使用 re.compile() 和 re.split() 分割 CSV 数据

假设你有一个 CSV(逗号分隔值)字符串,你想要分割它以提取数据。

import re

csv_content = 'One,Two,Three,"Four, Five",Six'

# 编译一个正则表达式,用于匹配 CSV 数据
# 注意:我们使用 re.escape() 来确保逗号被正确转义
csv_pattern = re.compile(r',(?=(?:[^"]*"[^"]*")*[^"]*$)')

# 使用 re.split() 分割 CSV 数据
csv_parts = csv_pattern.split(csv_content)

# 打印 CSV 数据部分
for part in csv_parts:
    print(re.sub(r'"(.*?)"', r'\1', part.strip()))

输出结果

在这个案例中,我们使用 re.compile() 编译一个正则表达式,该表达式匹配 CSV 文件中的逗号,同时考虑到可能存在的带引号的字段。然后,我们使用 re.split() 来分割 CSV 字符串。最后,我们使用 re.sub() 来移除字段周围的引号。

这两个案例展示了 re.compile()re.split() 如何结合使用来处理复杂的文本分割任务,特别是在需要考虑特殊字符或格式时。通过编译正则表达式,我们可以提高代码的可读性和性能

在实际的爬虫应用中,re.split() 常用于初步处理和清洗数据,而 re.compile() 则用于定义复杂的匹配规则,尤其是当这些规则需要在爬虫的不同部分重复使用时。通过使用这些正则表达式函数,可以更有效地从网页中提取有用信息。

两个函数的用法想必我们会简单的应用,后期我会继续完善爬虫理论,能够让爬虫技术不在变了杂乱无章,同时将理论用于项目实战。也希望实践能够纠正理论。

好了,我是好运,想要好运。今日分享,到此一游。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好运2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值