正则
一些特殊符号及文本组合在一起的用来描述字符或字符串的一些规则,叫做正则
正则中的特殊符号
匹配一个范围:[]
[A-Z]:A, B, C…
[0-9]:1, 2, 3…
匹配任何数字字符:\d
\d:1, 2, 3…
匹配任何空白符:\s
\s:\t (水平制表), \v (垂直制表), \n (换行), \r (回车), \f (换页)
匹配任何数字、字母、字符及下划线:\w
\w: a, 1, _
匹配除了换行符任意一个单个字符:.
a.c:abc, a2c, a_c
..:匹配任意字符组成的两个长度的字符串
匹配前面出现的正则表达式0次或多次:*
a*:aaa 或是一个空
[abc]*:aaabbb abc bbaacc
匹配前面出现的正则表达式0次或一次:?
a?:a 或是一个空
匹配前面出现的正则表达式1次或多次:+
a+:aaa a
abc+:abcabc
匹配前面出现的正则表达式固定次数:{}
a: aaaaa
\d:12345, 22222
匹配明确的多个选择:
a b:a, b
abccdf123:abc, cdf, 123
匹配字符串的开头或结尾:^, $
^abc:匹配所有以abc开头的字符串
abc$:匹配所有以abc结尾的字符串
否定匹配:[^]
[^a]:匹配除了a之外的所有字符
re模块函数
re.compile(pattern)
编译正则表达式
一般的,特殊字符再进行正则匹配的时候,如果你不预先编译正则表达式,解释器也会在你传入参数的时候进行编译
一些常用正则表达式,我们可以提前使用该函数进行预先编译,提高程序的效率
re.match(pattern,string)
尝试使用正则模式pattern在字符串中的开头进行严格匹配,如果开头匹配失败则匹配失败
匹配成功:返回一个匹配对象,匹配到的值可通过group函数获取
匹配失败:返回None
re.findall(pattern,string)
返回字符串中正则模式的所有非重复出现
注意:由于匹配的表达式中,我希望匹配的只是单纯的*号,并不具有特殊意义,所以要加一个斜杠防止转义
re.search(pattern,string)
返回字符串中正则模式的第一次出现,没有匹配结果则返回None
结果可以通过返回值的group函数获取
re.sub(str1,str2,str3)
re.subn(str1,str2,str3)
str1:要替换的字符串
str2:替换成什么
str3:在哪个字符串里进行替换
这两个函数都可以实现搜索和替换功能,均返回一个替换之后的新字符串
subn函数会以元组形式包含一个表示替换的总数
贪婪非贪婪
如果问号?紧跟在任何使用闭合(类似* +这样的操作符)的匹配后面, 它将直接要求正则表达式引擎匹配尽可能少的次数,这叫做非贪婪
贪婪匹配:正则表达式引擎将试图“吸收”匹配该模式的尽可能多的字符
非贪婪匹配:问号要求正则表达式引擎去“偷懒”,如果可能,就在当前的正则表达式中尽可能少地匹配字符,留下尽可能多的字符给后面的模式
简易百度图片爬虫
目标站点:任意百度图片地址
抓取分析:百度图片中的Html代码中objURL部分为实际图片地址,其他连接大家可以尝试访问,部分为压缩图片,部分做了防盗链处理,还有部分是404无法访问
实际代码:
urlopen( url, ):
打开一个连接,并且返回一个HttpResponse对象
参数第一个为URL连接地址
urlretrieve(url, path ):
根据资源地址,下载资源
第一个参数为地址,第二个参数为本地保存路径
分析:这里只是一个非常简单的页面分析代码,通过正则分析页面中的对应URL部分,并且使用( )提取出真正需要的内容
关于爬虫,此处只介绍了不到0.01的部分,所以请各位观众在阅读时,了解这只是一个小玩具,单纯为了练习正则
本文转自京峰教育Python金牌讲师李老师
本文链接:https://heroiclee.github.io/C7-Python函数进阶-正则/
本文链接:https://heroiclee.github.io/C8-Python函数进阶-简易百度图片爬虫/
领取专属 10元无门槛券
私享最新 技术干货