写在前面的话:
re模块当中有很多函数,但是以下三种:
re.sub, re.findall, re.match 这三个命令是爬虫当中经常使用到的
爬虫当中经常使用到re.sub,re.findall,re.match 进行数据清洗,提取,请务必掌握好这3个命令。
接下来就是一些小案例,训练并掌握下对re.sub,re.finadll,re.match的运用以及对应输出的结果有一定的认知。
- findall:提取 ——>核心在于,要提取什么(定义个正则表达式,在哪里进行)
- sub:替换 ——>核心在于,要替换什么对象,被替换成什么,在哪里进行
- match:匹配——>核心在于,要匹配什么,在哪里匹配
with open('index.html','r',encoding='utf-8') as f:
html=f.read()
print(html)
html输出的结果如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<footer>
<div>
<div class="email">
Email:kefu@CSDN.net
</div>
<div class="tel">
手机号:400-660-0108
</div>
</div>
</footer>
</body>
</html>
# 定义一个提取email的正则表达式
#先导入re 模块
import re
pattern_1='<div class="email">(.*?)</div>' #匹配div标签里面的class="email"
ret_1=re.findall(pattern_1,html) # 用正则表达式,在html中去提取
print(ret_1) # 但提取的结果为一个空列表,原因在于,.匹配除了换行符意外的所有字符
## 因此先过滤掉\n,过滤\n 使用re.sub()
html_s=re.sub('\n','',html)
print(html_s)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <footer> <div> <div class="email"> Email:kefu@CSDN.net </div> <div class="tel"> 手机号:400-660-0108 </div> </div> </footer></body></html>
## 过滤掉\n后,再进行提取操作即findall
ret_2=re.findall(pattern_1,html_s)
print(ret_2)
[' Email:[email protected] ']
## 如上显示的结果前尾都有空格的列表,通过取列表的索引0,在通过strip()函数能够去掉收尾的空白
print(ret_2[0].strip()) # 如下显示即为提取到的邮箱地址,就是我们想要提取的数据
Email:kefu@CSDN.net
### 定义一个匹配密码的正则表达式
###注意前面加一个^是为了防止被转义
password_pattern=r'^[a-zA-Z0-9_]{5,15}$' # 该密码以字母、数字或者下划线为开头,长度为6-16位
pass1='1234567'
pass2='k123456'
pass3='k123'
print(re.match(password_pattern,pass1))
print(re.match(password_pattern,pass2))
print(re.match(password_pattern,pass3))
<re.Match object; span=(0, 7), match='1234567'>
<re.Match object; span=(0, 7), match='k123456'>
None
心得体会:
re.sub, re.findall, re.match 这三个命令
数据清洗,提取,爬虫当中经常使用到
务必掌握好这3个命令