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

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解析”是指使用正则表达式&#xff08;regular expression&#xff0c;简称regex&#xff09;进行文本解析或匹配的过程。 解析网页内容的三种方式&#xff1a; 1、bs4解析&#xff08;最简单&#xff09; 2、re解析&#xff08;解析速度最快&#xf…...

可靠的图纸加密软件,七款图纸加密软件推荐

大家好啊,我是小固,今天跟大家聊聊图纸加密软件。 作为一名设计师,我深知保护自己的知识产权有多重要。曾经就因为图纸泄露,差点血本无归,那个教训可真是惨痛啊!所以我今天就给大家推荐几款靠谱的图纸加密软件,希望能帮到你们。 固信软件https://www.gooxion.com/ 首先要隆重…...

【每日一题】【最短路】【BFS】小红走矩阵 “葡萄城杯”牛客周赛 Round 53 F题 C++

“葡萄城杯”牛客周赛 Round 53 F题 小红走矩阵 题目背景 “葡萄城杯”牛客周赛 Round 53 题目描述 n m n\times m nm的矩阵由障碍和空地组成&#xff0c;初始时小红位于起点 ( 1 , 1 ) (1,1) (1,1)&#xff0c;她想要前往终点 ( n , m ) (n,m) (n,m)。小红每一步可以往上…...

无线磁吸充电宝哪个牌子值得入手?什么牌子磁吸充电宝性价比高?

在当下科技日新月异的时期&#xff0c;无线磁吸充电宝成为了众多电子设备用户的得力助手。然而&#xff0c;面对市场上众多品牌和型号的无线磁吸充电宝&#xff0c;消费者常常陷入选择的困境&#xff1a;到底哪个牌子值得入手&#xff1f;什么牌子的磁吸充电宝性价比高&#xf…...

互联网摸鱼日报(2024-08-01)

互联网摸鱼日报(2024-08-01) 36氪新闻 氪星晚报 | Uber与比亚迪合作&#xff0c;将在平台上增加10万辆电动汽车&#xff1b;维维股份将收购大窑汽水&#xff1f;公司回应&#xff1a;消息不实&#xff1b;我国科学家取得全固态锂电池研究新突破 《死侍与金刚狼》&#xff0c;…...

Alpla003经典的价量背离的因子在可转债列表里的因子分析(附python代码)

原创文章第605篇&#xff0c;专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 遗传算法给出的因子五花八门&#xff0c;可解释性不高。 强化学习原理不同&#xff0c;但结果类似。 大模型之前咱们尝试过&#xff0c;Quantlab3.9代码&#xff1a;内置大模型LL…...

进阶理解——typeof 、instanceof

typeof 、instance of 先聊聊JavaScript基本类型数据类型5种含值数据类型2种不含值类型 6种类型的*对象* typeofinstanceof总结进一步扩展一下具体讨论一下typeof局限性扩展判断方法 很多时候&#xff0c;回头望&#xff0c;理解会更深刻&#xff0c;也希望能帮助一些初学的同学…...

不同类型的生物反应器在支架成熟过程中具有哪些特点和应用?

3D Bioprinting of Human Tissues: Biofabrication, Bioinks, and Bioreactors是发表于《International Journal of Molecular Sciences》的一篇综述&#xff0c;详细介绍了3D生物打印人体组织的相关技术进展&#xff0c;包括数据处理、生物打印技术、生物墨水配方、生物反应器…...

8. Spring Ai之入门到精通(超级详细)

简介 2024年5月30号Spring AI 的 1.0.0 里程碑 1 版本发布。表明版本已正在巩固&#xff0c;并且大部分主要错误和问题已经解决&#xff0c;API基本已确定&#xff0c;不会发生很大的变化。 在与大模型集成方面&#xff0c;继LangChain4j之后&#xff0c;又一重大的框架诞生。标…...

寄存器和硬件的关系

寄存器也是一种存储器&#xff0c;只不过普通的存储器只能写和读。里面的数据并没有赋予什么实际意义。但是寄存器就不一样了&#xff0c;寄存器的每一位数据&#xff0c;都对应了硬件电路的状态。寄存器和外设的硬件电路&#xff0c;是可以进行互动的。所以&#xff0c;程序到…...

【WEB】ctfshow-萌新-web9-15

文章目录 题目介绍&#xff1a;题目分析&#xff1a;payload&#xff1a; 题目介绍&#xff1a; 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打靶教程】

第一步&#xff1a;查看虚拟机的ip 第二步&#xff1a;扫描ip下开放的80端口 第三步&#xff1a;扫描查到的ip地址下的目录 第四步&#xff1a;访问查到的目录 访问robot.txt 第五步:访问robot.txt显示出的目录 第六步&#xff1a;打开kali终端&#xff0c;使用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 &#xff0c;其中 (r, c) 表示&#xff1a; 如果 grid[r][c] 1 &#xff0c;则表示一个存在小偷的单元格 如果 grid[r][c] 0 &#xff0c;则表示一…...

轻触开关 KH-4.5X4.5X5.5H-STM

品  牌&#xff1a; kinghelm(金航标) 厂家型号&#xff1a; KH-4.5X4.5X5.5H-STM 封装&#xff1a; SMD 商品毛重&#xff1a; 0.317克(g) 包装方式&#xff1a; 编带...

3.redis客户端

1.命令行客户端 在安装redis的时候就已经安装好了&#xff0c;就是redis-cli redis-cli -h 127.0.0.1 -p 6379 -a 123456 -a 表示密码 -h 表示ip&#xff0c;不配置默认为本机 127.0.0.1 -p 表示端口&#xff0c;不配置默认为 6379 进入后可以输入ping&#xff0c;返回pong代表…...

Rust配置国内源,解决安装依赖慢问题

温馨提示&#xff1a;最新内容仅在原文更新。 国内源使用字节的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学习的参数与调优 在强化学习领域中&#xff0c;Q学习是一种经典的算法&#xff0c;可以用来解决各种问题&#xff0c;包括游戏和机器人控制等。Q学习算法的性能很大程度上取决于一些重要的参数&#xff0c;例如学习率和折扣因子。本文将介绍这些参数的…...

《小迪安全》学习笔记02

域名默认存放目录和IP默认存放目录不一样。 IP地址是WWW文件里的&#xff0c;域名访问是WWW里的一个子目录里的&#xff08;比如是blog&#xff09;。 Nmap: Web源码拓展 拿到一个网站的源码&#xff0c;要分析这几个方面↑。 不同类型产生的漏洞类型也不一样 在网站中&…...

C语言:自定义类型进阶(结构体、联合体、枚举)

自定义类型&#xff08;结构体、联合体、枚举&#xff09; 一、结构体&#xff08;一&#xff09;结构体的内存对齐1、结构体内存对齐规则&#xff08;1&#xff09;引子&#xff08;2&#xff09;offsetof 宏函数&#xff08;3&#xff09;内存对齐原理&#xff08;4&#xff…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...