正则匹配工具
链接:https://pan.baidu.com/s/13Pw7zO6EWiR97kwgBnxAxA
提取码:bdns
打开后傻瓜式安装就好了
比较重要的正则表达式使用 示例
简单的就直接看上面的图了,这里就吧哪些比较难懂的说一下
匹配邮箱:
\w*@(163|qq)\.com
\num 引用分组字符串
<([A-Za-z]+)><([A-Za-z]+)>.*</\2></\1>
特别说明:必须和所引用的分组匹配到的字符串相同,不然匹配不上:
还有一种起别名的引用方式:
<(?P<name1>[A-Za-z]+)><(?P<name2>[A-Za-z]+)>.*</(?P=name2)></(?P=name1)>
re模块使用
match 匹配
"""
使用re模块进行正则表达式验证
"""
import re
str = "18874@163.com"
result = re.match(r"\w{4,20}@163\.com$", str)
if result:
print("匹配成功")
#拿到结果
print(result.group())
else:
print("匹配失败")
特别说明:
ps正则表达式字符串前面加上“r”表示:让正则中的""不再具有转义功能
search 匹配
和 match 的区别就是 search 不一定要从第一位开始匹配
"""
使用re模块进行正则表达式验证
"""
import re
str = ",当前上: 123线人数: 123为";
# search 不一定要从第一位开始匹配
result = re.search(r": \d*", str)
if result:
print("匹配成功")
#拿到结果
print(result.group())
else:
print("匹配失败")
**findall 匹配*
findall 匹配
"""
使用re模块进行正则表达式验证
"""
import re
str = ",当前上: 123线人数: 123为";
# search 不一定要从第一位开始匹配
result = re.findall(r": \d*", str)
if result:
print("匹配成功")
# 如果使用 findall 匹配的话用这里
for i in result:
print(i)
else:
print("匹配失败")
综合案例: 爬取“妹子图”网页上所有页的妹子图片
"""
爬取“妹子图”网页上所有页的妹子
"""
import requests
import re
import time
import os
# 设置请求头,模拟浏览器去获取数据,所以要带这个请求头,但是一定要使用自己的
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400",
}
# 获取当前目录 放循环里边会有问题
root = os.getcwd()
for page in range(8):
# 进入当前目录
os.chdir(root)
# 创建文件夹
os.mkdir(f"第{page + 1}页")
# 改变当前文件目录
os.chdir(f"第{page+1}页")
# 这是请求地址
response = requests.get(f"https://www.meizitu.com/a/qingchun_3_{page+1}.html", headers=header)
# 因为那个网址设置成的是 gb2312 如果不一样会乱码的哦
response.encoding = "gb2312"
# 请求成功就执行这里
if response.status_code == 200:
# 这是请求 html 源码的全部内容
# print(response.text)
# 这是通过 正则表达式 找符合条件的内容,并且返回
# (""" 是因为里边有 ” 和 ')
#(.*?)这是分组的作用,如果这么写返回的 结构就会成 元祖 里面就是我们分组中的数据,这样我们就可可以只拿 sec 和 alt 中的数据
# 去除了我们不要的数据,非常方便
result = re.findall("""<a target='_blank' href=".*?"><img src="(.*?)" alt="(.*?)"></a>""", response.text)
i = 1
for r in result:
# 拿到图片地址
path = r[0]
# 拿到图片名
name = r[1].replace("<b>", "").replace("</b>", "")
# # 根据图片地址,再次请求
response = requests.get(path, headers=header);
# 将图片存起来 wb代表是以二进制的方式存储,而不是字符串
with open(f"{str(i)+name}.jpg", "wb") as f:
f.write(response.content)
print(f"{str(i)+name} : {path} 保存成功")
time.sleep(0.5)
i += 1
print(f"第{page+1}页抓取成功,请慢慢欣赏")
time.sleep(2)
运行代码后执行效果:
这妹子好好看 嘿嘿嘿: