python爬虫要不要学正则_Python爬虫学习(四)正则表达式

经过前面的学习之后,大家现在应该可以顺利地得到一个网页源码字符串,对于Python中的字符串,Python提供了很多操作,大家可以其去尝试提取网页源码字符串中想要的信息。在这里,给大家推荐的是正则表达式!

文章最后还有爬取糗事百科的实例哦!

什么是正则表达式

说白了,正则表达式就是描述我们需要提取的那部分信息的规则的工具。

举个栗子,比如,我们想要提取'Stay hungry, 123 stay foolish!'中的那部分数字,可以使用(\d+)这个式子来表达。

学习正则表达式

正则表达式的学习,差不多就是在学习它的元字符:

元字符

稍微看一下上面的图表,相信大家已经有点明白怎么回事了,如果想要更详细的学习资料,推荐:

正则表达式必知必会

都可以让你轻松入门!

使用re库

re 使 Python 语言拥有全部的正则表达式功能,那么我们就使用re库来演示一波!

re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None。

函数语法:

re.match(pattern, string, flags=0)

pattern 匹配的正则表达式

string 要匹配的字符串。

flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

实例

re.search函数

re.search 扫描整个字符串并返回第一个成功的匹配。

函数语法:

re.search(pattern, string, flags=0)

pattern 匹配的正则表达式

string 要匹配的字符串。

flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

实例

标志位

正则表达式可以包含一些可选标志修饰符来控制匹配的模式,也就是在前面提到的flags标志位的可选参数。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:

re.compile函数

有时候,我们可能会在代码中大量重复使用相同的模式,这时我们可以将正则字符串编译成正则对象,以便于复用该匹配模式。

一次编译,到处使用!

爬取糗事百科首页

首先,来到糗事百科,然后审查一下元素,如下图:

定位源码

我们可以发现,每个段子似乎都在一个

……
标签中,于是,有了一个大胆的想法。

我们使用urllib库获取到网页源码字符串后,就可以使用刚学的正则表达式把段子提取出来了。

可是,段子这么多,之前学过的各种函数re.search、re.match什么的,只可以提取到一个匹配结果呀。没错,于是我们使用re.findall,可以提出到所有的匹配结果。

问题都差不多解决了,下面开始动手:

nice!段子来了!!!

当然,你可以给上面的代码进行修改,比如加入异常处理,更好的组织等等。

以上。

你可能感兴趣的:(python爬虫要不要学正则)