爬虫学习——Re解析


一、数据解析

1.引入

在前面我们学习了可以提取整个网页的基本技能,但有时候我们并不需要网页的全部内容,只是需要其中的一小部分,而这就涉及到了数据解析与数据提取的问题。

2.分类

  • Re解析
  • bs4解析
  • xpath解析

三种解析方式是可以混合使用的,完全以结果作为导向,只要你能拿到想要的数据,用什么方案并不重要。

3.基本原理概述

解析的局部文本内容都会在标签之间或者标签对应的属性中进行存储
1.进行指定标签的定位
2.标签或者标签对应的属性中存储的数据值进行提取(解析)

二、Re解析

Re解析全称是 Regular Expression,也就是我们所谓的正则表达式,是一种使用表达式的方式对字符串进行匹配的语法规则。优点是速度快、效率高、准确性高,缺点是新手上手难。

1.正则表达式的语法

我们可以简单的用一句话来概括正则表达式——使用元字符进行排列组合用来匹配字符串 。在这里我推荐大家使用一个可以在线测试正则表达式的网站:https://tool.oschina.net/regex/,方便我们熟悉正则表达式。

1)元字符

元字符就是具有固定含义的特殊字符

.   :	匹配除换行符以外的任意字符
\w  :	匹配字母或数字或下划线
\s  :	匹配任意的空白符
\d  :	匹配数字
\n  :	匹配一个换行符
 \t  :	匹配一个制表符

 ^   :	匹配字符串的开始
$   :	匹配字符串的结尾

\W  :	匹配非字母或数字或下划线
\D  :	匹配非数字
\S  :	匹配非空白符
 a|b :	匹配字符a或字符b
()  :	匹配括号内的表达式
[...]   :	匹配字符串中的字符
[^...]  :	匹配除了字符串中字符的所有字符

2)量词——控制前面的元字符出现的次数

*  :	重复零次或更多次
+  :	重复一次或更多次
?  :	重复零次或一次
{n}  :	重复n次
{n,}  :	重复n次或更多次
{n,m}  :	重复n次或m次

3)贪婪匹配和惰性匹配

.*  :   贪婪匹配
.*? :   惰性匹配(用的最多)

2.Python的re模块使用

我们现在已经知道了正则表达式的语法,并且明白了如何去使用它们,那么我们怎么才能在 Python 程序中使用正则呢?答案是 re 模块。

re 模块中有很多方法,但我们只需要熟练掌握以下几个方法即可。

  • findall(): 匹配字符串中的所有符合正则的内容
import re
# findall:  匹配字符串中的所有符合正则的内容
lst = re.findall(r"\d+", "我的电话号是:10086,我女朋友的电话号是:10010")
print(lst)
  • finditer(): 匹配字符串中的所有内容[返回的是迭代器],从迭代器中拿到内容需要.group()
import re
# finditer:  匹配字符串中的所有内容[返回的是迭代器],从迭代器中拿到内容需要.group()
it = re.finditer(r"\d+", "我的电话号是:10086,我女朋友的电话号是:10010")
for i in it:
    print(i.group())
  • search(): 找到一个结果就返回,返回的结果是match对象,拿数据需要.group()
import re
# search:  找到一个结果就返回,返回的结果是match对象,拿数据需要.group()
s = re.search(r"\d+", "我的电话号是:10086,我女朋友的电话号是:10010")
print(s.group())
  • match():是从头开始匹配
import re
# match:是从头开始匹配
m = re.match(r"\d+", "10086,我女朋友的电话号是:10010")
print(m.group())
  • compile():预加载正则表达式
# 预加载正则表达式
import re
obj = re.compile(r"\d+")
lst = obj.findall("我的电话号是:10086,我女朋友的电话号是:10010")
print(lst)

除此之外,还有几个点比较重要,分别是 re.S(?P<组名>)re.S 的作用是让元字符"."匹配换行符,(?P<组名>) 的作用是为正则表达式分组,调用**group(“组名”)**函数输出命名为该组名的表达式的解析。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个默默无闻的小程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值