热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从零开始写Python爬虫1.4正则表达式:re库

想要学习爬虫,正则表达式是一定绕不过去的一关。正则表达式是我们在筛选文本数据是经常使用的利器。简单来说,一个正则表达式表达了符合这一规则的一系列的文本。从’通配符‘到正则表达式玩l

想要学习爬虫,正则表达式是一定绕不过去的一关。正则表达式是我们在筛选文本数据是经常使用的利器。简单来说,一个正则表达式表达了符合这一规则的一系列的文本。

从’通配符‘到正则表达式

玩linux的同学在bash里一定经常用下面这一段代码:

rm -rf /*.txt

这里其实就是一个非常简单的删除当前目录下所有txt文件的命令,
*号其实就一个 ‘通配符’。表示任何形式的数据。
从这里我们就可以引出正则表达式的概念:

正则表达式是用来简洁表达一组字符串的表达式,或者你可以将它理解为高级版的 通配符 表达式

  • 举个例子:

import re
test = 'python is the best language , pretty good !'
p = re.findall('p+',test)
print(p)
''' OUT: ['p', 'p'] '''

正则表达式的语法:

来一套言简意赅的图:

来几个正则表达式的栗子:

《从零开始写Python爬虫 --- 1.4 正则表达式:re库》

常用的正则表达实例:

注意一下 :
$ 表示结束匹配

《从零开始写Python爬虫 --- 1.4 正则表达式:re库》
《从零开始写Python爬虫 --- 1.4 正则表达式:re库》

Python的re库的基本使用

re库是Python内置的标准库,所以我们不用安装,

直接import re就能直接使用。

re库有着非常强大的功能!学好re库对我们爬虫的编写有极大的帮助!

re库 采用了 raw string 类型来表示正则表达式,

例如:

re1 = r'[1-9]\d{5}'

这里的正则表示1一个1~9的数字和5个0~9的数字

如:1000 就符合re标准

使用raw string 的好处是 我们不用手动去再次写转义字符了。
如果不用raw string 类型, 上面的正则表达式我们就得这么写:

re1 = '[1-9]\\d{5}'

re库的主要功能函数:

我们着重讲一下 re.search这个函数:

''' re.search(pattern, string, flags=0) 在一个字符串中搜索匹配正则表达式的第一个位置 返回match对象 ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙ string : 待匹配字符串 ∙ flags : 正则表达式使用时的控制标记 '''
str1 = 'hello , world ,life is short ,use Python .WHAT? '
a = re.search(r'\w+',str1)
print(a.group()) # hello

可以看到 我们成功找到了第一个 字符串 ”hello“

  • 常用的第三个参数 flags:

re.IGNORECASE:忽略大小写,同 re.I。

re.MULTILINE:多行模式,改变

和$的行为,同

re.M。

re.DOTALL:点任意匹配模式,让’.’可以匹配包括’\n’在内的任字符,同 re.S。

我们来使用一下控制标记试试:

str1 = 'hello , world ,life is short ,use b = re.search(r'w.+D',str1,re.I) print(b.group()) # world

可以看到r’w.+D’ 成功匹配到了world

我们再来说另一个常用函数re.findall()

''' re.findall(pattern, string, flags=0) 搜索字符串,以列表类型返回全部能匹配的子串 ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙ string : 待匹配字符串 ∙ flags : 正则表达式使用时的控制标记 '''
c = re.findall(r'\w+',str1)
print (c)
#['hello', 'world', 'life', 'is', 'short', 'use', 'Python', 'WHAT']

可以看到,我们找整个字符串中的所有单词,并且以列表类型反回了

好了,剩下的函数用法基本和上面相似,都很简单的。用的时候稍微看一下参数就可以。我就不一一介绍了。

re库的另一种用法

在前面的例子中,我们都是在调用方法是传入一个原生字符串来表示re表达式,但是在多次搜索符合同一规则的数据时,这样做就会使得效率大大降低。相对应的我们有替代的做法。

str2 = 'hssso'
re1 = re.compile(r'h.{3}o')
print(re1.findall(str1))
print(re1.findall(str2))
# ['hello']
# ['hssso']

这样,先把正则进行编译,在进行查找,就能大量节省时间,增加效率

关于Match 对象:

match对象是一次匹配的结果,他包含了很多的信息:

''' match 对象的属性 .string : 待匹配的文本 .re : 匹配时使用的patter对象(正则表达式) .pos : 正则表达式搜索文本的开始位置 .endpos : 正则表达式搜索文本的结束位置 '''
d = re.search(r'e.+d',str1)
print(d.group()) # ello , world
print (d.string) # hello , world ,life is short ,use Python .WHAT?
print (d.re) # re.compile('e.+d')
print (d.pos) # 0
print (d.endpos) # 48

好了,关于re库,我们暂时就先介绍到这里,
只是介绍了一些浅显的用法,re库还有很多更加高级的用法,
我会在以后的实战里慢慢展现。
说道实战,写简单爬虫的基础咱们已经都掌握了。
下一篇就是实战教程了!

每天的学习记录都会 同步更新到:
微信公众号: findyourownway
知乎专栏:Ehco – 知乎
blog : www.ehcoblog.ml


推荐阅读
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • 本文详细介绍了Python中正则表达式和re模块的使用方法。首先解释了转义符的作用,以及如何在字符串中包含特殊字符。然后介绍了re模块的功能和常用方法。通过学习本文,读者可以掌握正则表达式的基本概念和使用技巧,进一步提高Python编程能力。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Excel数据处理中的七个查询匹配函数详解
    本文介绍了Excel数据处理中的七个查询匹配函数,以vlookup函数为例进行了详细讲解。通过示例和语法解释,说明了vlookup函数的用法和参数的含义,帮助读者更好地理解和运用查询匹配函数进行数据处理。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文介绍了一种求解最小权匹配问题的方法,使用了拆点和KM算法。通过将机器拆成多个点,表示加工的顺序,然后使用KM算法求解最小权匹配,得到最优解。文章给出了具体的代码实现,并提供了一篇题解作为参考。 ... [详细]
author-avatar
月夜清风XL
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有