一只爬虫带你看世界【8】

12. 正则表达式特殊用法及示例(re.findall 方法介绍)

one:利用Re.findall返回单子组:

示例:使用正则表达式爬取贴吧图片(findall用法 - 返回正则表达式中单个子组),说明:采用模块化化编程思想,将打开url封装成一个函数,即open_url(url)。

 使用正则表达式匹配图片:

 p = r'<imgclass="BDE_Image" src="([^"]+\.jpg)"'

 其中[^"]+\.jpg,匹配非双引号的所有字符,并且重复(1,+)次,后缀名为.jpg形式的图片。使用()将需要信息的子组,即直接返回http://www.baidu.com/##/##.jpg而不是整个正则表达式匹配的信息。即imgclass="BDE_Image" src=http://www.baidu.com/##/##.jpg

 注意:该情况是正则表达式中只有一个子组

 试验 a:未使用正则表达式中的 findall 方法的子组

代码截图如下

一只爬虫带你看世界【8】

返回的结果:

一只爬虫带你看世界【8】


试验b:使用正则表达式中的 findall 方法中单个子组

一只爬虫带你看世界【8】

试验结果:

一只爬虫带你看世界【8】

使用了正则表达式中findall方法的子组后,直接返回图片下载地址,而不是整个img信息。

使用正则表达式爬取IP地址(findall用法-返回正则表达式中多个子组)


two:使用正则表达式爬取IP地址(findall用法-返回正则表达式中多个子组)

上述one中考虑了正则表达式中只有一个子组,two部分则是考虑返回多个子组的情况!

若在正则表达式中使用了多个(),返回多个子组,需要做些处理,使用非捕获组语法

一只爬虫带你看世界【8】

语法:

在正则表达式中,将待返回的子组前加入“?:”则表示非捕获信息

示例如下:

一只爬虫带你看世界【8】

返回的结果:

一只爬虫带你看世界【8】

使用正则表达式匹配ip地址的表达:

    p =r'(?:(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])\.){3}(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])'

该正则表达式中有三个子组,确保返回正确的信息,在每个子组前方的左括号后加上?:则正确返回待查询的信息。


总结部分:

在正则表达式中,若返回单个子组,待返回部分使用一对括号;若返回多个子组,待返回部分使用多对括号,并且在每对括号前加上问号和冒号即可!