python爬虫笔记(3-1)re模块

2021/8/10 9:05:48

本文主要是介绍python爬虫笔记(3-1)re模块,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

re模块:最适合在script中提取内容

re是python正则模块标准库 在线正则表达式测试:https://tool.oschina.net/regex   常用元字符: . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白字符,空格,制表符,换页符 \d 匹配0~9 之间的数字 \n 匹配一个换行符 ^ 匹配字符串的开始 $ 匹配字符串的结束 \S 匹配任何非空白字符 \W 匹配非字母或数字或下划线 \D 匹配非数字 () 匹配括号内的表达式,也表式一个组 [...] 匹配字符组中的字符 [^...] 匹配除了字符组中字符的所有字符   量词: 控制前面的元字符出现的次数 * 重复0次或更多次 + 重复1次或更多次 ? 重复0次或1次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次   贪婪匹配和惰性匹配 .* 贪婪匹配 .* ? 贪婪匹配   re模块中爬虫程序主要使用的功能 findall 查找所有,返回list finditer 查找所有,返回迭代器,需用for循环取出里面的值 search 会进行匹配,如果匹配到了一个结果就会返回这个结果,如果匹配不上就返回none match 只能从字符串的开头进行匹配 compile() 将一个长正则进行预加载,方便后面的使用 单独提取正则中的内容: 可通过给分组起名字的方法对正则中的内容进行单独提取

基本结构: import re obj = re.compile(r"",re.S)

例: import re # findall:匹配字符串中所有符合正则的内容 lst = re.findall(r"\d+","我的电话是:10086,他的电话是:10010") print(lst)   # finditer:匹配字符串中所有的内容【返回的是迭代器】,从迭代器中拿到内容需要.group()函数 it = re.finditer(r"\d+","我的电话是:10086,他的电话是:10010") for i in it: print(i.group())     # search:全文匹配找到一个结果就返回,返回的结果是match对象,如果拿不到结果返回none,拿数据需要.group()函数 s = re.search(r"\d+","我的电话是:10086,他的电话是:10010") print(s.group())     # match:从头开始匹配 s = re.match(r"\d+","111,我的电话是:10086,他的电话是:10010") print(s.group())     # 预加载正则表达式,可在多处重复使用 obj = re.compile(r"\d+")   ret = obj.finditer("我的电话是:10086,他的电话是:10010") for it in ret: print(it.group())   ret = obj.findall("我的电话是:10086,他的电话是:10010") print(ret)     # 单独提取正则中的内容:(?P<分组名字>正则):单独从正则匹配的内容中再进一步提取所需要的内容 st = """ <div class='西游记'><span id='1'>孙悟空</span></div> <div class='水浒传'><span id='2'>林冲</span></div> <div class='三国演义'><span id='3'>刘关张</span></div> <div class='红楼梦'><span id='4'>贾宝玉</span></div> """ # (?P<分组名字>正则):单独从正则匹配的内容中再进一步提取所需要的内容 obj = re.compile(r"<div class='.*?'><span id='\d+'>(?P<hahaha>.*?)</span></div>",re.S) #re.S可以让.匹配任意字符 rest = obj.finditer(st) for i in rest: print(i.group()) print(i.group("hahaha"))

 



这篇关于python爬虫笔记(3-1)re模块的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程