为了填补上次留下关于python爬虫的坑,就分享一下python爬虫中可能会用到的一些关于正则表达式的解析
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。re模块有很多种函数和修饰符可以调用
正则表达式模式
首先就是一些表达式会出现的表达模式
模式 | 描述 |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾。 |
. | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。 |
re* | 匹配0个或多个的表达式。 |
re+ | 匹配1个或多个的表达式。 |
re? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
特殊字符类
实例 | 描述 |
---|---|
. | 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。 |
\d | 匹配一个数字字符。等价于 [0-9]。 |
\D | 匹配一个非数字字符。等价于 [^0-9]。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\w | 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。 |
\W | 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。 |
字符组合应用
如果这些模式或者字符类看起来在实际中可能很单一,但是将它们组合起来应用的很巧妙,例如:
.*表示任意字符出现零次或多次,像a.*c,如果没有加?就是表示贪婪模式,从a开头就必须找到最后一个c才算匹配完成,不愧是贪婪!
.*?就是加了个?,表示就是非贪婪模式,找到一个c就罢休了
.+?与.*?的不同点在于+,.+?所匹配字符中间必须有字符,因为+表示1到多个
正则表达式的应用还有很多,如验证IP地址,你们也可以自行去检验,我上边用来验证到网站网址为
http://https: // regex101.com /
之前回顾
那么之前遗留的点,也算是对自己的查漏补缺了,.*?就可以让我们匹配不重复出现的所有内容
在使用()选定,我们所要获取图片SRC的内容就完成了
# 使用通用爬虫对整张页面进行爬取
page_text = requests.get(url=new_url, headers=headers).text
# 使用聚焦爬虫对页面中所有图片进行爬取
ex = '<div class="imageWarp"><img class="left lazy".*? data-original="(.*?)"'
img_src_list = re.findall(ex, page_text, re.S)
print(img_src_list)
findall函数
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。
正则表达式修饰符
修饰符 | 描述 |
---|---|
re.S | 使 . 匹配包括换行在内的所有字符 |