Python 网络爬虫之解析网页【正则表达式-re模块】
使用re模块进行正则表达式进行验证
match
# match("者则表达式","匹配值")(从第一个开始匹配,若第一个不对则不匹配)
str = "X_lady@163.com"
result = re.match("\w{4,20}@163\.com", str)
if result:
print("恭喜:匹配成功")
# group在无下标的时候默认打印
print(result.group())
else:
print("遗憾:匹配失败")
# $(表示结束)
单个标签
# <div>Python</div>
# 正则表达式
# ()分组 \num(与第几个相对应)
# <([A-Za-z]+)>.*</\1>
多个标签
# <div><span>Python</span></div>
# 正则表达式为
# <([A-Za-z]+)><([A-Za-z+]+)>.*</\2></\1>
# str = "<div><span>Python</span></div>"
# result = re.match("<(?P<a>[A-Za-z]+)><(?P<b>[A-Za-z]+)>.*</(?P=b)></(?P=a)>", str)
# if result:
# print("恭喜:匹配成功")
# # group在无下标的时候默认打印
# print(result.group())
# else:
# print("遗憾:匹配失败")
# # $(表示结束)
起别名
# 起别名
# 格式 (?P<name1>正则表达式) 引用(?P=name1)
match 和search()区别
# match 和search()区别
str = "你好:123,感谢遇见你:889"
# result = re.match("\d*", str)
# result = re.search(":\d*", str)
# findall 是集合需要遍历
result = re.findall("\d*", str)
if result:
print("恭喜:匹配成功")
# group在无下标的时候默认打印
for i in result:
print(i)
# match <re.Match object; span=(0, 0), match=''> 匹配成功却无值
# <re.Match object; span=(0, 3), match='123'> 需要把字符串去掉才会有值
else:
print("遗憾:匹配失败")
# $(表示结束)
贪婪和非贪婪模式用
# 贪婪和非贪婪模式用 ?区分
"""
变量:第一个字符必须是字母数字下划线
使用re模块进行正则表达式进行验证
"""
import re
# match("者则表达式","匹配值")(从第一个开始匹配,若第一个不对则不匹配)
# str = "X_lady@163.com"
# result = re.match("\w{4,20}@163\.com", str)
# if result:
# print("恭喜:匹配成功")
# # group在无下标的时候默认打印
# print(result.group())
# else:
# print("遗憾:匹配失败")
# $(表示结束)
# <div>Python</div>
# 正则表达式
# ()分组 \num(与第几个相对应)
# <([A-Za-z]+)>.*</\1>
# <div><span>Python</span></div>
# 正则表达式为
# <([A-Za-z]+)><([A-Za-z+]+)>.*</\2></\1>
# 起别名
# 格式 (?P<name1>正则表达式) 引用(?P=name1)
# str = "<div><span>Python</span></div>"
# result = re.match("<(?P<a>[A-Za-z]+)><(?P<b>[A-Za-z]+)>.*</(?P=b)></(?P=a)>", str)
# if result:
# print("恭喜:匹配成功")
# # group在无下标的时候默认打印
# print(result.group())
# else:
# print("遗憾:匹配失败")
# # $(表示结束)
# match 和search()区别
str = "你好:123,感谢遇见你:889"
# result = re.match("\d*", str)
# result = re.search(":\d*", str)
# findall 是集合需要便利
result = re.findall("\d*", str)
if result:
print("恭喜:匹配成功")
# group在无下标的时候默认打印
for i in result:
print(i)
# match <re.Match object; span=(0, 0), match=''> 匹配成功却无值
# <re.Match object; span=(0, 3), match='123'> 需要把字符串去掉才会有值
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/77.0.3865.120 Safari/537.36"
}
# 获取当前目录
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/list_1_{page+1}.html", headers=header)
response.encoding = "gb2312"
if response.status_code == 200:
# print(response.text)
result = re.findall("""<a target='_blank' href=".*?"><img src="(.*?)" alt="(.*?)"></a>""", response.text)
i = 1
for i in result:
name = i[1].replace("<b>", "").replace("</b>", "")
path = i[0]
print(f"{name}{path}")
#根据图片地址再次请求(解析)
response = requests.get(path, headers=header)
# 图片为二进制 wb则为二进制保存
# Python 数字和字符串不可以相加,需要转换类型
with open(f"{str(i)+name}.jpg", "wb") as f:
# 响应的文本,内容content
f.write(response.content)
print(f"{str(i)+name}:{path} 保存成功")
time.sleep(1)
i += 1
print(f"第{page+1}获取成功,请慢慢欣赏")
time.sleep(4)
版权声明:本文为what_to原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。