python爬虫入门(五)之Re解析
创始人
2024-11-14 20:34:11
0

一、什么是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=""" 
刘亦菲
宋祖儿
谷爱凌
""" # re.S: 让 . 能匹配换行符,防止匹配的内容断掉 obj1=re.compile(r"
\d+)'>(?P.*?)
",re.S) res=obj1.finditer(content) for i in res: print(i.group("wahaha")) print(i.group("id")) # 就是套娃,写模板 # 精细筛选(可以单独从正则匹配的内容中进一步提取内容):(?P<组名>正则) .group("组名")

相关内容

热门资讯

IA解析/微信金花房卡怎么弄天... 天蝎大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
我来教你/金花房卡如何购买蜜瓜... 今 日消息,蜜瓜大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
正版授权!金花房卡出售天酷大厅... 天酷大厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
一分钟了解!斗牛房卡充值趣游联... 一分钟了解!斗牛房卡充值趣游联盟/怎么充值获取房卡趣游联盟是一款非常受欢迎的游戏,咨询房/卡添加微信...
怎么开炸金花房卡链接/微信群牛... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:8488009许多玩家在游戏中会购买房卡来享受...
秒懂教程“微信炸金花房卡在哪里... 金牛座金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡...
头条推荐!怎么买斗牛房卡天龙大... 您好!微信天龙大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(天龙大厅)大厅介绍:...
我来教你/游戏推荐斗牛房卡出售... 今 日消息,光明联盟房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
科技实测!金花房卡如何购买热玩... 热玩吧房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根据...
微信好友炸金花房卡如何购买/购... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:33903369许多玩家在游戏中会购买房卡来享...
重大通报,游戏推荐斗牛房卡出售... 微信游戏中心:旺旺大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
IA解析/金花房卡代理零售时光... 时光互娱是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
推荐一款!金花充值房卡精卫大厅... 推荐一款!金花充值房卡精卫大厅/房卡怎么购买Sa9Ix苹果iPhone 17手机即将进入量产阶段。有...
微信炸金花如何买房卡/金花链接... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
玩家攻略,牛牛房卡游戏平台加盟... 天龙大厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
怎么创建炸金花房间房卡/新永和... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:55051770许多玩家在游戏中会购买房卡来享...
正规平台有哪些,牛牛房卡制作链... 神龙大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
一分钟了解!牛牛房卡制作链接青... 一分钟了解!牛牛房卡制作链接青鸟大厅/房卡怎么搞Sa9Ix苹果iPhone 17手机即将进入量产阶段...
正版授权!牛牛房卡游戏平台加盟... 今 日消息,详心联盟房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
正版授权!金花微信链接市场价格... 超游联盟房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...