爬虫风雨路,正则知多少?——谈谈正则表达式那些事

写在前面

原计划接下来几期文章聊一下pandas库以及机器学习那些事,奈何终究还是受不了一些朋友的反馈,希望小编讲一些网页解析的知识。既然如此,小编就满足一下这些朋友的要求,接下来几期就和大家聊一下网络爬虫中网页解析方面的相关知识。这将主要围绕正则表达式、lxml、beautifulsoup以及pyquery四种解析工具展开。因为正则表达式是所有解析方式中最高效以及适用性最高的工具,所以这期文章就先和大家讲一下正则表达式的相关用法,下面正式开始。

正则表达式

正则表达式,又称规则表达式(英文:Regular Expression),计算机科学的一个概念。其是对字符串操作的一种逻辑公式,通过事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,从而实现检索、替换文本的目的。邮箱系统大家应该都不陌生,一般格式为几个字符或数字组成的串+@+.+163/qq/其它+ com/cn或其它后缀,如果使用正在表达式去查找文本中的邮箱文本,那么就可以通过以下这种方式实现:

就是这串你初看起来头痛的字符构成就能很快地在你的文本中查找出邮箱所在的文本。现在你可能对此很茫然,所以下面小编就要开始好好地唠一下正则表达式的相关知识。

以上这些正则字符可能是你最常用的一些字符,这些字符的含义应该不难理解,着重讲解一下最后的贪婪算法和非贪婪算法。

可以看出在正则表达式匹配中,你最好采用的方式就是非贪婪算法,因为贪婪算法会少匹配很多字符。不过需要记得的是如果需要匹配的字符位于字符串末尾,则非贪婪算法不会有效,此时需要使用贪婪算法。

python内置re模块

很多编程语言都存在相应的正则表达式方法,python自然不例外。python中实现一切正则表达式的方法就集中在python内置模块re中,下面介绍一下这个模块中的主要函数。

match()函数

match()函数通过输入正则模式以及字符串,从而尝试从字符串的起始位置匹配正则表达式,如果匹配,就返回匹配成功的结果;如果不匹配,就返回None,用法表示为:

示例如下:

search()函数

search()函数根据正则表达式匹配并提取第一个符号规则的文本内容,用法为:

示例如下:

sub()函数

sub()函数根据正则表达式规则替换其中符合规则的内容,用法为:

示例如下:

findall()函数

findall()函数用于匹配所有符合正则规则的文本内容,并且以列表的形式返回,例如下面的例子:

compile()函数

之前介绍的函数都是直接使用正则表达式好字符串,而compile()函数则先将正则表达符编译成正则表达式对象,以便在后面的匹配中重复使用。示例如下:

re模块修饰符

在爬虫中,re.S是最常用的修饰符,它能够换行匹配,以下面例子阐述:

第一种方式会提示错误,第二种方式才能正确输出,所以这就是re.S的作用。

爬虫示例

最后以爬取猫眼电影排行榜信息结束本期文章,废话不多说,直接上代码。

爬取结果

后记

本文讲到这里就暂告一段落了,本期文章和大家聊了一下正则表达式的相关字符及用法,为正确地爬取网页内容奠定了基础。后续文章会继续介绍另外几种网页解析的工具,敬请期待。最后再次感谢你们的支持与鼓励,你们的陪伴是小编前进的动力!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180910G21AMA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券