python爬虫入门(五)之Re解析
一、什么是Re解析
“Re解析”是指使用正则表达式(regular expression,简称regex)进行文本解析或匹配的过程。
解析网页内容的三种方式:
1、bs4解析(最简单)
2、re解析(解析速度最快)
3、xpath解析(语法规则最舒服)
选择解析方法通常取决于要处理的文档类型和具体的任务需求。
Beautiful Soup适合处理不规范的HTML和简单的数据提取;
正则表达式适合对文本模式进行精确匹配和替换;
而XPath则是处理复杂XML文档和需要精确节点定位的首选工具。
二、正则表达式
正则的语法:使用元字符进行排列组合,用来匹配字符串。
(元字符:具有固定含义的特殊符号)
在线正则表达式测试网址:https://tool.oschina.net/regex/
1、常用元字符:
| . (除换行符以外的任意字符) | |
| \w (数字、字母和下划线) | \W (\w的反义) |
| \d (数字) | \D (非数字) |
| \s (空白符) | \S (非空白符) |
| \n (换行符) | \t (制表符) |
| ^ (字符串的开始) (比如:^\d\d\d\d\d\d$) | $ (字符串的结尾) |
| a|b (匹配字符串a或字符串b) (比如:10010|10086) | |
| [...] (匹配字符组中含有的字符) (比如:[a-zA-Z0-9]表示 匹配所有数字和字母) | [^...] (匹配除了字符组中字符 的所有字符) |
2、量词:
量词:控制前面的元字符出现的次数
| * | 重复0次或更多次 |
| + | 重复1次或更多次 |
| ? | 重复0次或1次 |
| {n} | 重复n次 |
| {n,} | 重复n次或更多次 |
| {n,m} | 重复n到m次 |
比如:\d+表示一串数字,前后可以是其他类型的内容
^\d+表示字符串的开头必须是一串数字 (前面不能有其他类型的内容)
3、贪婪匹配和惰性匹配:
| .* | 贪婪匹配 |
| .*? | 惰性匹配 |
贪婪匹配:尽可能多地匹配内容
惰性匹配(爬虫常用):尽可能少地匹配内容
举个例子:
玩儿开心消消乐游戏吗?晚上一起玩游戏。干嘛呢?打游戏啊!
匹配:玩儿.*?游戏
结果:玩儿开心消消乐游戏
原理:回溯算法
先找“玩儿”,然后“.*游戏”表示尽可能多地找,找到最后一个“游戏”,再是“?”表示尽可能少地找,逼迫着计算机回溯找反方向的最后一个“游戏”。
三、Re模板
Re模板为python自带的内置模块,是标准库的一部分,不需要自己安装。
六小点:
1、findall(正则,字符串) 全局匹配,返回列表list
2、finditer 全局匹配,返回迭代器iter ( .group() )
3、search 仅能匹配出第一个结果 ( .group() )
4、match 从头开始匹配(相当于给正则加上^)( .group() )
5、compile(正则) 预加载
6、(?P<组名>正则) 精细筛选 ( .group(“组名”))
注意:要不要加上“ ”
import re# re.findall(pattern,string,flags=0)
# 返回字符串中所有符合正则的内容,组成一个列表
list=re.findall(r"\d+","我的电话号码是:10086,他的电话号码是:10010")
print(list)
#"\d"前加r,可以防止出现波浪线# re.finditer(pattern,string,flags)
# 返回字符串中所有符合正则的内容(不过以match方式呈现),组成一个迭代器
it=re.finditer(r"\d+","我的电话号码是:10086,他的电话号码是:10010")
for i in it:print(i.group())
# list可以直接到打印,而迭代器需要利用for循环来逐个打印其中内容(迭代器的效率比列表高)
# 迭代器中包含的是match对象,要想拿到实际内容需要用到.group()# re.search(pattern,string,flags)
# 返回字符串中第一个符合正则的内容(不过以match方式呈现),相当于迭代器的第一个迭代结果
s=re.search(r"\d+","我的电话号码是:10086,他的电话号码是:10010")
print(s.group())
# 要想拿到实际数据同样要用到.group()# re.match(pattern,string,flags)
# 从头开始匹配,相当于把"\d+"变成了"^\d+",表示字符串的开头必须是纯数字
# 否则会出现AttributeError: 'NoneType' object has no attribute 'group'
m=re.match(r"\d+","10086,他的电话号码是:10010")
print(m.group())# find全局匹配(findall返回列表,finditer返回迭代器),search匹配第一个,match从头开始匹配#预加载(预编译)正则表达式(若正则表达式很长,先预加载好,后续直接用、反复用,可以提高一点效率)
# obj=re.comfile(pattern,flags)
# obj.finditer(string)
obj=re.compile(r"\d+")
it=obj.finditer("我的电话号码是:10086,他的电话号码是:10010")
for i in it:print(i.group())content="""
<div class='a'><span id='1'>刘亦菲</span></div>
<div class='b'><span id='2'>宋祖儿</span></div>
<div class='c'><span id='3'>谷爱凌</span></div>
"""
# re.S: 让 . 能匹配换行符,防止匹配的内容断掉
obj1=re.compile(r"<div class='.*?'><span id='(?P<id>\d+)'>(?P<wahaha>.*?)</span></div>",re.S)
res=obj1.finditer(content)
for i in res:print(i.group("wahaha"))print(i.group("id"))
# 就是套娃,写模板
# 精细筛选(可以单独从正则匹配的内容中进一步提取内容):(?P<组名>正则) .group("组名")
相关文章:
python爬虫入门(五)之Re解析
一、什么是Re解析 “Re解析”是指使用正则表达式(regular expression,简称regex)进行文本解析或匹配的过程。 解析网页内容的三种方式: 1、bs4解析(最简单) 2、re解析(解析速度最快…...
可靠的图纸加密软件,七款图纸加密软件推荐
大家好啊,我是小固,今天跟大家聊聊图纸加密软件。 作为一名设计师,我深知保护自己的知识产权有多重要。曾经就因为图纸泄露,差点血本无归,那个教训可真是惨痛啊!所以我今天就给大家推荐几款靠谱的图纸加密软件,希望能帮到你们。 固信软件https://www.gooxion.com/ 首先要隆重…...
【每日一题】【最短路】【BFS】小红走矩阵 “葡萄城杯”牛客周赛 Round 53 F题 C++
“葡萄城杯”牛客周赛 Round 53 F题 小红走矩阵 题目背景 “葡萄城杯”牛客周赛 Round 53 题目描述 n m n\times m nm的矩阵由障碍和空地组成,初始时小红位于起点 ( 1 , 1 ) (1,1) (1,1),她想要前往终点 ( n , m ) (n,m) (n,m)。小红每一步可以往上…...
无线磁吸充电宝哪个牌子值得入手?什么牌子磁吸充电宝性价比高?
在当下科技日新月异的时期,无线磁吸充电宝成为了众多电子设备用户的得力助手。然而,面对市场上众多品牌和型号的无线磁吸充电宝,消费者常常陷入选择的困境:到底哪个牌子值得入手?什么牌子的磁吸充电宝性价比高…...
互联网摸鱼日报(2024-08-01)
互联网摸鱼日报(2024-08-01) 36氪新闻 氪星晚报 | Uber与比亚迪合作,将在平台上增加10万辆电动汽车;维维股份将收购大窑汽水?公司回应:消息不实;我国科学家取得全固态锂电池研究新突破 《死侍与金刚狼》,…...
Alpla003经典的价量背离的因子在可转债列表里的因子分析(附python代码)
原创文章第605篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 遗传算法给出的因子五花八门,可解释性不高。 强化学习原理不同,但结果类似。 大模型之前咱们尝试过,Quantlab3.9代码:内置大模型LL…...
进阶理解——typeof 、instanceof
typeof 、instance of 先聊聊JavaScript基本类型数据类型5种含值数据类型2种不含值类型 6种类型的*对象* typeofinstanceof总结进一步扩展一下具体讨论一下typeof局限性扩展判断方法 很多时候,回头望,理解会更深刻,也希望能帮助一些初学的同学…...
不同类型的生物反应器在支架成熟过程中具有哪些特点和应用?
3D Bioprinting of Human Tissues: Biofabrication, Bioinks, and Bioreactors是发表于《International Journal of Molecular Sciences》的一篇综述,详细介绍了3D生物打印人体组织的相关技术进展,包括数据处理、生物打印技术、生物墨水配方、生物反应器…...
8. Spring Ai之入门到精通(超级详细)
简介 2024年5月30号Spring AI 的 1.0.0 里程碑 1 版本发布。表明版本已正在巩固,并且大部分主要错误和问题已经解决,API基本已确定,不会发生很大的变化。 在与大模型集成方面,继LangChain4j之后,又一重大的框架诞生。标…...
寄存器和硬件的关系
寄存器也是一种存储器,只不过普通的存储器只能写和读。里面的数据并没有赋予什么实际意义。但是寄存器就不一样了,寄存器的每一位数据,都对应了硬件电路的状态。寄存器和外设的硬件电路,是可以进行互动的。所以,程序到…...
【WEB】ctfshow-萌新-web9-15
文章目录 题目介绍:题目分析:payload: 题目介绍: ctfshow-萌新计划-web9-15 <?php # flag in config.php include("config.php"); if(isset($_GET[c])){$c $_GET[c];if(preg_match("/system|exec|highlight…...
【Vulnhub靶场AI-WEB-1.0打靶教程】
第一步:查看虚拟机的ip 第二步:扫描ip下开放的80端口 第三步:扫描查到的ip地址下的目录 第四步:访问查到的目录 访问robot.txt 第五步:访问robot.txt显示出的目录 第六步:打开kali终端,使用sqlmap功能 sq…...
html实现酷炫美观的可视化大屏(十种风格示例,附源码)
文章目录 完整效果演示1.蓝色流线风的可视化大屏1.1 大屏效果1.2 大屏代码1.3 大屏下载 2.地图模块风的可视化大屏2.1 大屏效果2.2 大屏代码2.3 大屏下载 3.科技轮动风的可视化大屏3.1 大屏效果3.2 大屏代码3.3 大屏下载 4.蓝色海洋风的可视化大屏4.1 大屏效果4.2 大屏代码4.3 …...
【C++BFS算法 二分查找】2812. 找出最安全路径
本文涉及知识点 CBFS算法 C二分查找 LeetCode2812. 找出最安全路径 给你一个下标从 0 开始、大小为 n x n 的二维矩阵 grid ,其中 (r, c) 表示: 如果 grid[r][c] 1 ,则表示一个存在小偷的单元格 如果 grid[r][c] 0 ,则表示一…...
轻触开关 KH-4.5X4.5X5.5H-STM
品 牌: kinghelm(金航标) 厂家型号: KH-4.5X4.5X5.5H-STM 封装: SMD 商品毛重: 0.317克(g) 包装方式: 编带...
3.redis客户端
1.命令行客户端 在安装redis的时候就已经安装好了,就是redis-cli redis-cli -h 127.0.0.1 -p 6379 -a 123456 -a 表示密码 -h 表示ip,不配置默认为本机 127.0.0.1 -p 表示端口,不配置默认为 6379 进入后可以输入ping,返回pong代表…...
Rust配置国内源,解决安装依赖慢问题
温馨提示:最新内容仅在原文更新。 国内源使用字节的RsProxy https://rsproxy.cn/ 解决rust-analyzer加载时间过长(请参考本文) 配置环境变量 Mac export RUSTUP_DIST_SERVER"https://rsproxy.cn" export RUSTUP_UPDATE_ROOT"https://rsproxy.cn/r…...
AI学习指南机器学习篇- Q学习的参数与调优
AI学习指南机器学习篇- Q学习的参数与调优 在强化学习领域中,Q学习是一种经典的算法,可以用来解决各种问题,包括游戏和机器人控制等。Q学习算法的性能很大程度上取决于一些重要的参数,例如学习率和折扣因子。本文将介绍这些参数的…...
《小迪安全》学习笔记02
域名默认存放目录和IP默认存放目录不一样。 IP地址是WWW文件里的,域名访问是WWW里的一个子目录里的(比如是blog)。 Nmap: Web源码拓展 拿到一个网站的源码,要分析这几个方面↑。 不同类型产生的漏洞类型也不一样 在网站中&…...
C语言:自定义类型进阶(结构体、联合体、枚举)
自定义类型(结构体、联合体、枚举) 一、结构体(一)结构体的内存对齐1、结构体内存对齐规则(1)引子(2)offsetof 宏函数(3)内存对齐原理(4ÿ…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
