爬虫必会知识点--->正则表达式

tech2026-03-11  0

正则表达式

一、为什么要学正则表达式二、正则表达式的原理三、元字符1、匹配边界2、匹配字符3、重复次数 四、python中正则表达式模块-------re一、re的使用步骤1、将正则表达式编译成一个pattern对象2、pattern对象有以下几个方法: 二、贪婪模式与非贪婪模式

一、为什么要学正则表达式

实际上爬虫一共就四个主要步骤:

​ (1)明确目标(要知道你准备在哪个范围或者网站去搜索)

​ (2)爬(将所有的网站的内容全部爬下来)

​ (3)取(去掉对我们没用处的数据)

​ (4)处理数据(按照我们想要的方式存储和使用)

​ 我们在之前的案例里实际上省略了第 3 步,也就是"取"的步骤。因为我们 down 下了的

数据是全部的网页,这些数据很庞大并且很混乱,大部分的东西是我们不关心的,因此我们

需要将之按我们的需要过滤和匹配出来。

​ 那么对于文本的过滤或者规则的匹配,最强大的就是正则表达式,是 Python 爬虫世界

里必不可少的神兵利器。

二、正则表达式的原理

三、元字符

1、匹配边界

^行首$行尾

2、匹配字符

\d数字\w数字,字符,下划线\b单词的边界\s空白字符.除换行符以外的任意字符[a-z1-9A-Z]字母和数字[\u4e00-\u9fa5]中文[^123abc]匹配除了123abc这几个字符以外的任意字符

3、重复次数

?0或1*>=0+>=1{n,}>=n{n,m}n<=x<=m{n}重复n次

四、python中正则表达式模块-------re

一、re的使用步骤

​ 第一步: 使用compile()函数将正则表达式的字符串形式编译为一个Pattern对象

​ 第二步:通过Pattern对象提供的一系列方法对文本进行匹配查找,获取匹配结果,一个Match对象

​ 第三步:最后使用Match对象提供的属性和方法获取信息,根据需要进行其他的操作

import re

1、将正则表达式编译成一个pattern对象

pattern = re.compile( r'正则表达''匹配模式')

re.S----.可以匹配换行符—.现在啥都能匹配了。

re.I—忽略大小写

2、pattern对象有以下几个方法:

(1)match:从头开始匹配,只匹配一次,返回match对象

Match = pattern.match( string,#要匹配的目标字符串 pos,#要匹配目标字符串的起始位置(可选) endpos#结束位置(可选) ) #match对象属性 #1、取内容 print(m3.group(0)) #2、取匹配范围 print(m3.span(0)) # 3、取起始位置 print(m3.start(0),m3.end())

(2)search:从任意位置匹配,只匹配一次,返回match的对象

Match = pattern.search( string,#要匹配的目标字符串 pos,#要匹配目标字符串的起始位置(可选) endpos#结束位置(可选) )

(3)findall:全文匹配,匹配多次,返回list。

list= pattern.findall( string,#要匹配的目标字符串 pos,#要匹配目标字符串的起始位置(可选) endpos,#结束位置(可选) )

(4)finditer:全文匹配,匹配多次,返回可迭代对象

补充:

可迭代对象和迭代器。

可迭代对象:——iter——

迭代器:——next——,——iter——

对于可迭代对象,我们都是通过for循环来进行遍历获取数据的。

二、贪婪模式与非贪婪模式

1、贪婪和非贪婪是对数量控制符的限时,作用对象就是数量控制符。

2、贪婪表示数量控制符取最大值,非贪婪表示数量控制符取最小值。

3、正则模式数量控制符取最大值也是默认贪婪模式。非贪婪需要通过?来控制。

\d+?

4、非贪婪主要用于精确查找。

import re # p1 = re.compile(r'ab*')#[0,3] p1 = re.compile(r'ab*?')#[0,3] r1 = p1.findall('abbbc') # print(r1) #在非贪婪的情况下,就取最小值:0 p3 = re.compile(r'ab+?')#[1,3] r3 = p3.findall('abbbc') print(r3) # p4 = re.compile(r'ab?') p5 = re.compile(r'ab??')#[0,1] r5 = p5.findall('abbbc') print(r5) import re s = 'aa<div>test1</div>bb<div>test2</div>cc' pattern1 = re.compile('<div>.*</div>')#[5,24] pattern2 = re.compile('<div>.*?</div>')#[5,24] result1 = pattern1.findall(s) result2 = pattern2.findall(s) print(result1) #['<div>test1</div>bb<div>test2</div>'] print(result2) #['<div>test1</div>'] #.*?---
最新回复(0)