前言
正则表达式是Python爬虫最重要的过滤原始数据的手段之一,是爬虫最核心的技术
下面我分享一下我对正则表达式的心得和常用的基础知识
目录
正则表达式的基本匹配逻辑
正则表达式的匹配是你写的公式有几个字符或者范围,它会从头到尾的去找,一直找到字符串结束
正则表达式单个字符匹配列表
. 匹配单个字符,不包括换行符 几个点匹配几个连着的字符
\w 匹配单个的字母、数字、下划线 几个匹配几个连着的字母、数字、下划线
\d 匹配单个数字
\s 匹配单个空格、换行符
大写表示的就是相反
\W 匹配单个非字母、数字、下划线
\D 匹配单个非数字
\S 匹配单个非空格、换行符
[] 表示单个字符,匹配中括号里面自定义的字符,字符之间直接连着
其中 -是到 的意思 ^是除了的意思 可以设置多个区间直接连续写 比如
[abcd] 匹配单个a或者b或者c或者d的字符
[a-f] 匹配单个a到f的字符
[0-2a-e] 匹配单个0到2、a到e的字符
[^a-e] 匹配单个除了a到e的字符
其他大多数是写什么内容匹配什么内容,比如我写e字符,那它就匹配e字符
正则表达式多次匹配单个字符的方式
如果单个字符想表示匹配多次,在单个匹配字符的符号后面跟着 {匹配字符数量} 如
匹配3个数字 \d{3}
如果单个字符想表示匹配是0次或者更多,在单个字符的符号后面跟着 *
如果单个字符想表示匹配是1次或者更多,在单个字符的符号后面跟着 +
正则表达式贪婪匹配和惰性匹配
贪婪匹配 按最大范围找到的一个最长的字符串作为匹配结果
惰性匹配 按最小范围找到的一个最短的字符串作为匹配结果
* 和 + 就是默认的贪婪匹配
*? 和 +? 就是惰性匹配
可以把惰性匹配看成 *? 和 +? 是 * 和 + 的进阶版
获取匹配后中的目标值
如果想要获取匹配好中的目标值,直接把想获取的目标值的位置,在正则表达式用括号括起来
比如 正则表达式 is(.*)M 得到的结果就是is字符串和M字符串之间的字符,并且是贪婪匹配
正则表达式在爬虫的使用心得
正则表达式在匹配一些不是很精细化的东西比较方便,但是精细化的操作使用难度很多,后期读代码维护起来也很浪费时间。
我一般喜欢使用正则表达式截取爬到网页源代码中的JavaScript标签里面的josn字符串,然后配合json标准库对json字符串进行转化,读取。
至于一些细节上面的采集,可以使用Xpath进行使用。
Xpath的特点就是上手快,适合精细定位。但是它是按照标签进行采集数据的,采集一些夸标签的数据显得很笨拙。
正则表达式Python代码示例
import re
str = "需要匹配的字符串"
# re.S参数是为了让正则表达式中的 . 可以匹配到换行符,适应复杂的页面源代码的数据过滤
res = re.findall("正则表达式", str, re.S)
print(res)