python爬虫入门(五)之Re解析

news2024/9/9 1:16:21

一、什么是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("组名")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1959004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

又一新AI搜索工具,OpenAI 推出新的搜索方式 SearchGPT

系列文章目录 每天推荐AI工具系列文章回顾&#xff1a; 选择 haiyi海艺图像生成、LoRA、模型的使用和训练网站 tusiart吐司艺术图像生成、LoRA 模型的使用和训练网站 解锁AI创造力的无限可能&#xff1a;探索Vivago.ai的革命性功能 文章目录 系列文章目录前言一、SearchGPT…

html+css+js前端作业和平精英6个页面页面带js

htmlcssjs前端作业和平精英6个页面页面带js 下载地址 https://download.csdn.net/download/qq_42431718/89595600 目录1 目录2 项目视频 htmlcssjs前端作业和平精英6个页面带js 页面1 页面2 页面3 页面4 页面5 页面6

锐捷RCNA | RGOS日常管理操作和Windows常用命令

RGOS操作系统最主要的三大特性是模块化、安全性、开放性。 RGOS平台登陆方式 平台概述 RGOS全称“锐捷通用操作系统”&#xff0c;即网络设备的操作系统 基于RGOS开发的软件版本目前为11.x&#xff0c;又被称为11.x平台优势 模块化设计&#xff0c;方便运维管理故障隔离&…

[ARC105E] Keep Graph Disconnected题解

题目 考虑加任意一条边时都会输的图的状态&#xff1a;图被分成两个强联通分量&#xff0c;每一个强联通分量都是一个完全图。 也就是说&#xff0c;假设一开始节点 1 1 1 和节点 n n n 不联通&#xff0c;那么还可以加 n ( n − 1 ) 2 − m − c n t 1 ( n − c n t 1 ) \…

78.SAP ME - SAP ME和SAP NetWeaver log files的位置

目录 1.defaultTrace files 内容 文件位置 2.dev_server files 内容 文件位置 3.dev_icm files 内容 文件位置 4.responses.trc files 内容 文件位置 1.defaultTrace files You should always check this log first when any system issue is reported 内容 包含…

经典文献阅读之--GraphAD(端到端自动驾驶的交互场景图)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…

什么是项目计划?项目计划如何制定?

做不好项目计划的项目管理&#xff0c;注定会失败&#xff01; 项目计划是帮助管理人员有效实现目标的非常重要的一环&#xff0c;在开始任何项目之前&#xff0c;制定一份详细的计划作为所有参与者的指导性文件非常重要。那么什么是项目计划&#xff1f;项目计划又该如何制定…

springboot集成thymeleaf实战

引言 笔者最近接到一个打印标签的需求&#xff0c;由于之前没有做过类似的功能&#xff0c;所以这也是一次学习探索的机会了&#xff0c;打印的效果图如下&#xff1a; 这个最终的打印是放在58mm*58mm的小标签纸上&#xff0c;条形码就是下面的35165165qweqweqe序列号生成的&…

民大食堂用餐小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;档口号管理&#xff0c;商家餐品管理&#xff0c;餐品种类管理&#xff0c;购物车管理&#xff0c;订单信息管理 微信端账号功能包括&#xff1a;系统首页&a…

pytorch-迁移学习

目录 1. 宝可梦数据集训练的问题2. 迁移学习3. 迁移学习实现4. 完整代码 1. 宝可梦数据集训练的问题 宝可梦数据总共有1000多张&#xff0c;对于resnet18网络来说数据量是不够的&#xff0c;训练时很容易出现过拟合&#xff0c;那么如何解决这个问题呢&#xff1f; 宝可梦数据…

常见的几种数据标注类型

数据标注是机器学习和人工智能项目中一个至关重要的步骤&#xff0c;它帮助算法理解输入数据中的关键特征。根据不同的应用场景和技术需求&#xff0c;数据标注可以分为多种类型。 以下是一些常见的数据标注类型&#xff1a; 图像标注&#xff1a; 边界框&#xff1a;在物体周…

手撕数据结构---栈和队列的概念以及实现

栈的概念&#xff1a; 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作的⼀端称为栈顶&#xff0c;另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈…

Doris-计算特性

1 全新优化器 1.1 如何开启1.2 统计信息 1.2.1 使用ANALYZE语句手动收集1.2.1 自动收集1.2.3 作业管理1.3 会话变量及配置项调优参数2 Join相关 2.1 支持的Join算子2.2 支持的shuffle方式 2.2.1 Broadcast Join2.2.2 Shuffle Join2.2.3 Bucket Shuffle Join 2.2.3.1 原理2.2.3.…

【CTFWP】ctfshow-web40

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 题目介绍&#xff1a;题目分析&#xff1a;payload&#xff1a;payload解释&#xff1a;payload2&#xff1a;payload2解释&#xff1a;flag 题目介绍&#xff1a; …

python-分享篇-用Python分析文本数据的词频

上次批量提取了上市公司主要业务信息&#xff0c;要分析这些文本数据&#xff0c;就需要做文本词频分析。由于中文不同于英文&#xff0c;词是由一个一个汉字组成的&#xff0c;而英文的词与词之间本身就有空格&#xff0c;所以中文的分词需要单独的库才能够实现&#xff0c;常…

2024年必备技能:小红书笔记评论自动采集,零基础也能学会的方法

摘要&#xff1a; 面对信息爆炸的2024年&#xff0c;小红书作为热门社交平台&#xff0c;其笔记评论成为市场洞察的金矿。本文将手把手教你&#xff0c;即便编程零基础&#xff0c;也能轻松学会利用Python自动化采集小红书笔记评论&#xff0c;解锁营销新策略&#xff0c;提升…

pmp学习交流组队~

首先&#xff0c;来看看什么是PMP PMP指的是项目管理专业人士资格认证。它是由美国项目管理协会&#xff08;Project Management Institute(PMI)发起的&#xff0c;严格评估项目管理人员知识技能是否具有高品质的资格认证考试。 pmp备考攻略本人推荐的参考资料比较多&#xff0…

MySQL 9 安装第1辑-版本选择和安装包获取

一、MySQL 9 版本选择 在准备安装MySQL时&#xff0c;选择合适的版本和分发格式至关重要。首先&#xff0c;需要决定是安装长期支持&#xff08;LTS&#xff09;系列版本还是创新系列版本。长期支持版本&#xff08;如MySQL 8.x LTS&#xff09;专注于稳定性、性能优化和安全性…

RocketMQ知识总结(基本原理)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 基本原理 总体架构图 零拷贝 零拷贝技术是一个思想&#xff0c;指…

蓝屏事件一些想法

影响全球的蓝屏事件 2024年7月19日发生了大量windows操作系统电脑蓝屏的事情&#xff0c;造成了全球级别的影响。其中国外的影响最大&#xff0c;甚至像医院、银行、航班等与人民生活密切相关的行业都受到了本次影响。导致全球数千架次航班被取消&#xff0c;数万架次航班延误…