文章目录
- 一、数据解析
- 1.引入
- 2.分类
- 3.基本原理概述
- 二、Re解析
- 1.正则表达式的语法
- 1)元字符
- 2)量词——控制前面的元字符出现的次数
- 3)贪婪匹配和惰性匹配
- 2.Python的re模块使用
一、数据解析
1.引入
在前面我们学习了可以提取整个网页的基本技能,但有时候我们并不需要网页的全部内容,只是需要其中的一小部分,而这就涉及到了数据解析与数据提取的问题。
2.分类
- Re解析
- bs4解析
- xpath解析
三种解析方式是可以混合使用的,完全以结果作为导向,只要你能拿到想要的数据,用什么方案并不重要。
3.基本原理概述
解析的局部文本内容都会在标签之间或者标签对应的属性中进行存储
1.进行指定标签的定位
2.标签或者标签对应的属性中存储的数据值进行提取(解析)
二、Re解析
Re解析全称是 Regular Expression,也就是我们所谓的正则表达式,是一种使用表达式的方式对字符串进行匹配的语法规则。优点是速度快、效率高、准确性高,缺点是新手上手难。
1.正则表达式的语法
我们可以简单的用一句话来概括正则表达式——使用元字符进行排列组合用来匹配字符串 。在这里我推荐大家使用一个可以在线测试正则表达式的网站:https://tool.oschina.net/regex/,方便我们熟悉正则表达式。
1)元字符
元字符就是具有固定含义的特殊字符
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30. : 匹配除换行符以外的任意字符 w : 匹配字母或数字或下划线 s : 匹配任意的空白符 d : 匹配数字 n : 匹配一个换行符 t : 匹配一个制表符 ^ : 匹配字符串的开始 $ : 匹配字符串的结尾 W : 匹配非字母或数字或下划线 D : 匹配非数字 S : 匹配非空白符 a|b : 匹配字符a或字符b () : 匹配括号内的表达式 [...] : 匹配字符串中的字符 [^...] : 匹配除了字符串中字符的所有字符
2)量词——控制前面的元字符出现的次数
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13* : 重复零次或更多次 + : 重复一次或更多次 ? : 重复零次或一次 {n} : 重复n次 {n,} : 重复n次或更多次 {n,m} : 重复n次或m次
3)贪婪匹配和惰性匹配
复制代码
1
2
3
4
5
6.* : 贪婪匹配 .*? : 惰性匹配(用的最多)
2.Python的re模块使用
我们现在已经知道了正则表达式的语法,并且明白了如何去使用它们,那么我们怎么才能在 Python 程序中使用正则呢?答案是 re 模块。
re 模块中有很多方法,但我们只需要熟练掌握以下几个方法即可。
- findall(): 匹配字符串中的所有符合正则的内容
复制代码
1
2
3
4
5
6import re # findall: 匹配字符串中的所有符合正则的内容 lst = re.findall(r"d+", "我的电话号是:10086,我女朋友的电话号是:10010") print(lst)
- finditer(): 匹配字符串中的所有内容[返回的是迭代器],从迭代器中拿到内容需要.group()
复制代码
1
2
3
4
5
6
7import re # finditer: 匹配字符串中的所有内容[返回的是迭代器],从迭代器中拿到内容需要.group() it = re.finditer(r"d+", "我的电话号是:10086,我女朋友的电话号是:10010") for i in it: print(i.group())
- search(): 找到一个结果就返回,返回的结果是match对象,拿数据需要.group()
复制代码
1
2
3
4
5
6import re # search: 找到一个结果就返回,返回的结果是match对象,拿数据需要.group() s = re.search(r"d+", "我的电话号是:10086,我女朋友的电话号是:10010") print(s.group())
- match():是从头开始匹配
复制代码
1
2
3
4
5import re # match:是从头开始匹配 m = re.match(r"d+", "10086,我女朋友的电话号是:10010") print(m.group())
- compile():预加载正则表达式
复制代码
1
2
3
4
5
6# 预加载正则表达式 import re obj = re.compile(r"d+") lst = obj.findall("我的电话号是:10086,我女朋友的电话号是:10010") print(lst)
除此之外,还有几个点比较重要,分别是 re.S 和 (?P<组名>),re.S 的作用是让元字符"."匹配换行符,(?P<组名>) 的作用是为正则表达式分组,调用**group(“组名”)**函数输出命名为该组名的表达式的解析。
最后
以上就是沉静薯片最近收集整理的关于爬虫学习——Re解析一、数据解析二、Re解析的全部内容,更多相关爬虫学习——Re解析一、数据解析二、Re解析内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复