当前位置: 首页 > news >正文

第七天:数据提取-正则表达式

       每天上午9点左右更新一到两篇文章到专栏《Python爬虫训练营》中,对于爬虫有兴趣的伙伴可以订阅专栏一起学习,完全免费。

       键盘为桨,代码作帆。这趟为期30天左右的Python爬虫特训即将启航,每日解锁新海域:从Requests库的浪花到Scrapy框架的深流,从反爬迷雾中的破局到数据清洗的澄澈。我们拆解网页结构如同解读星图,让XPath与正则表达式化作导航罗盘。每个深夜的代码调试,终将凝结成破晓时的数据宝藏。训练营不设码头,结营之日,正是你独自远征星辰大海的起点。

文章目录

一、 提取数据

规则:

二. 正则表达式相关注解

1 数量词的贪婪模式与非贪婪模式

2 常用方法

3. 正则表达式修饰符 - 可选标志

一、 提取数据

在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式!

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用正则表达式,从返回的页面内容提取出想要的内容就易如反掌了。

规则:

模式描述
$匹配字符串的末尾
.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
[...]用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^...]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
re*匹配0个或多个的表达式
^匹配字符串的开头
re+匹配1个或多个的表达式
re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{ n} 
re{ n,}精确匹配n个前面表达式
re{ n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
ab
(re)G匹配括号内的表达式,也表示一个组
(?-imx)正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域
(?imx)正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域
(?: re)类似 (...), 但是不表示一个组
(?imx: re)在括号中使用i, m, 或 x 可选标志
(?-imx: re)在括号中不使用i, m, 或 x 可选标志
(?#...)注释
(?= re)前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re)前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功
(?> re)匹配的独立模式,省去回溯
\w匹配字母数字及下划线
\W匹配非字母数字及下划线
\s匹配任意空白字符,等价于 [\t\n\r\f].
\S匹配任意非空字符
\d匹配任意数字,等价于 [0-9]
\D匹配任意非数字
\A匹配字符串开始
\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c
\z匹配字符串结束
\G匹配最后匹配完成的位置
\b匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'
\B匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'
\n, \t, 等.匹配一个换行符。匹配一个制表符。等
\1...\9匹配第n个分组的内容
\10匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式
[\u4e00-\u9fa5]

中文

二. 正则表达式相关注解

1 数量词的贪婪模式与非贪婪模式

正则表达式通常用于在文本中查找匹配的字符串 Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符

例如:正则表达式”ab”如果用于查找”abbbc”,将找到”abbb”。而如果使用非贪婪的数量词”ab?”,将找到”a”

2 常用方法

* re.match

       re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()  就返回none
      函数语法: re.match(pattern, string, flags=0)


* re.search

      re.search 扫描整个字符串并返回第一个成功的匹配。
函数语法: re.search(pattern, string, flags=0)


*  re.sub

      re.sub 替换字符串 re.sub(pattern,replace,string)


*  re.findall

      re.findall 查找全部 re.findall(pattern,string,flags=0)

3. 正则表达式修饰符 - 可选标志

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

修饰符描述
re.I使匹配对大小写不敏感
re.L做本地化识别(locale-aware)匹配
re.M多行匹配
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解

相关文章:

  • 已知自动驾驶的一个场景,如变道,如何做好预期功能安全
  • 空天技术赋能:毫米波基站+高速数字微波构筑应急通信新范式
  • 函数调用过程的详细解析
  • halcon激光三角测量(十七)calibrate_sheet_of_light_3d_calib_object
  • 容器、pod和缓存
  • 快速入门 Tailwind CSS:现代前端开发的利器
  • 【deepseek api 第三方平台使用参考】
  • 日常故障排查 - Java程序故障排查
  • Day19 第六章 二叉树part07
  • ASP.NET Core Web应用(.NET9.0)读取数据库表记录并显示到页面
  • 如何提升爬虫获取数据的准确性?
  • 记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-Web.IIS.Administration解读(5)
  • 【MySQL】使用 JDBC 连接数据库
  • GitHub 热点项目介绍
  • 闵氏几何详解
  • 用于仿真得到超材料的S参数后,利用S参数矩阵提取等效介电常数和磁导率
  • 【Golang学习之旅】Go 语言微服务架构实践(gRPC、Kafka、Docker、K8s)
  • 【java】方法的基本内存原理(栈和堆)
  • Python爬虫入门实例:Python7个爬虫小案例(附源码)
  • Python 爬虫中的异常处理
  • 福建、广西等地有大暴雨,国家防总启动防汛四级应急响应
  • 国际博物馆日|航海博物馆:穿梭于海洋神话与造船工艺间
  • 芬兰西南部两架直升机相撞坠毁,第一批救援队已抵达现场
  • 纪念|脖子上挂着红领巾的陈逸飞
  • “16+8”“生酮饮食”,网红减肥法究竟靠谱吗?
  • 新任国防部新闻发言人蒋斌正式亮相