re式匹配
匹配类型
- 导入库
import re
类型一(正则表达式匹配):
re.complie()
参数:
\d 表示 匹配数字
[m-n]表示匹配m到n区间内的数字,字母
{m,n} 该限定符的意思是至少有m个重复,至多有n个重复(数字长度最少为m+1,最长为n+1)
实例:[1-9]\d{4,10}表示匹配1到9区间的数字,至少有4个重复,最多有10个重复
类型二:
re.match()
匹配方式:从总字符串的第一个字符去对应要匹配的字符串(一 一对应,开头或者中间不同则之间匹配失败)
参数:字符串 ‘abc’
类型三:
re.search()
匹配方式:从总字符串的第一个字符去查找要匹配的字符串(存在则匹配成功)
参数:字符串 ‘abc’
类型四:
re.findall(pattern, String, flags=0)
参数:String为总字符串。
pattern = re.compile(es, re.S)
设置re.S则不会对\n进行中断
es为正则表达式
匹配代码
- 类型一
import re
pattern = re.compile("[1-9]\d{4,10}")
Str = "我的qq号码为2324324666888"
lis = re.findall(pattern , Str , flags=0)
print(len(lis[0]))
运行结果:
[‘23243246668’]
- 类型二
import re
line = "Cat are smarter than dogs"
matchObj = re.match(r'dogs', line)
if matchObj:
print("match->matchObj.group():",matchObj.group())
else:
print("No match!!")
searchObj = re.search(r'dogs', line)
运行结果:
No match!!
- 类型三
import re
line = "Cat are smarter than dogs"
searchObj = re.search(r'dogs', line)
print(searchObj)
if searchObj:
print("search->searchObj.group():",searchObj.group())
else:
print("NO match!!")
运行结果:
<_sre.SRE_Match object; span=(21, 25), match=‘dogs’>
search->searchObj.group(): dogs
- 类型四
在匹配网页指定关键字和爬取图片模块
匹配网页指定关键字
本案列匹配的是百度首页个别中文字段匹配内容如图:
注意:
由于百度中的文字为js动态加载则,我们需要去先执行以下步骤:打开浏览器设置——>网站设置——>JavaScript——>将百度添加为禁止;如图:
匹配详情
-
获取AU伪装
-
获取对应url
- 代码:
import re
import requests
if __name__ == '__main__':
# UA伪装
header = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
# 1.指定url
url = 'https://www.baidu.com/'
# 2.发送请求
response = requests.get(url=url,headers=header)
# 3.获取页面数据
text = response.content.decode('utf-8')
fileName = 'baidu.html'
with open(fileName,'w',encoding='utf-8') as f:
f.write(text)
# .*?为非贪婪模式,.*为贪婪模式
pattern = re.compile('class=mnav>(.*?)</a>', re.S)
result = re.findall(pattern, text, flags=0)
for i in result:
print(i)
运行结果:
新闻
hao123
地图
视频
贴吧
爬取网页图片
本案列为爬取糗事百科图像中的图片
爬取详情
-
获取有效url
-
获取UA伪装
-
下载图片
使用聚焦爬虫
代码:
import requests
import re
import os
if __name__ == '__main__':
# UA伪装
header = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
}
# 编写通用爬虫获取网页源码
url = 'https://www.qiushibaike.com/imgrank/'
response = requests.get(url=url,headers=header)
html = response.text
# print(html)
# 进行数据解析,获取目标url
es = 'target="_blank">\n<img src="(.*?)" alt=' # 换行小坑
pattern = re.compile(es, re.S)
url_list = re.findall(pattern, html, flags=0)
for url in url_list:
print(url)
if not os.path.exists('OiutuLib'):
os.mkdir('./QiutuLib')
# 编写聚焦爬虫,获取图片
for url in url_list:
src = "https:" + url
resp = requests.get(url=src,headers=header)
pic = resp.content # 转换二进制流的形式
# 持久化存储
fileName = url.split('/')[-1]
file_path = './QiutuLib/' + fileName
with open(file_path, 'wb') as f:
f.write(pic)
print('图片获取成功!!')
运行结果: