(3)贪婪匹配和惰性匹配
(4)re模块功能使用案例
① findall
② search
③ match
④ finditer (重点)
⑤ compile
⑥ 正则中的内容如何单独提前
Regular Expression,正则表达式,一种使用表达式的方式对字符串进行匹配的语法规则。
正则的优点:速度快,效率高,准确性高
正则的缺点:新手上手难度有点儿高
正则的语法:使用元字符进行排列组合用来匹配字符串,在线测试正则表达是:https://tool.oschina.net/regex/(这个地址可能打不开,可以自行用其他工具)
元字符:具有固定含义的特殊符号
findall查找所有,返回list
import retext = "我的电话号是10086,我的女朋友的电话是:10010"# findall:匹配字符串所有的符合正则的内容lst = re.findall(r"\d+", text)print(lst)
search会进行匹配,但是如果匹配到了第一个结果,就会返回这个结果,如果匹配不上search返回则是None
import retext = "我的电话号是10086,我的女朋友的电话是:10010"# search,找到一个结果就返回,返回的结果是match对象,拿数据需要.group()s = re.search(r"\d+", text)print(s.group())
match只能从字符串的开头进行匹配
import retext = "我的电话号是10086,我的女朋友的电话是:10010"# match是从头开始匹配s = re.match(r"\d+", text)print(s.group())
finditer和findall差不多,只不过这是返回的是迭代器(重点)
import retext = "我的电话号是10086,我的女朋友的电话是:10010"#finditer:匹配字符串中所有的内容[返回的是迭代器]it = re.finditer(r"\d+", text)for i in it: print(i.group())
compile()可以将一个长长的正则进行预加载,方便后面的使用
import retext = "我的电话号是10086,我的女朋友的电话是:10010"#预加载正则表达式obj = re.compile(r"\d+")ret = obj.finditer(text)for it in ret: print(it.group())ret = obj.findall("呵呵哒,我就不信你不换我1000000000000")print(ret)
单独获取到正则中的具体内容可以给分组起名字
import res = """<divclass='jwwy'><spanid='1'>曾经</span></div><divclass='qqy'><spanid='2'>不悔否</span></div><divclass='jqwy'><spanid='3'>好牌</span></div><divclass='vvy'><spanid='4'>忘川</span></div><divclass='jaqq'><spanid='5'>落泪</span></div>"""# (?P<分组名字>正则)可以单独从正则匹配的内容中选一步提前内容obj = re.compile(r"<divclass='.*?'><spanid='(?P<wahaha>\d+)'>.*?</span></div>", re.S)result = obj.finditer(s)for it in result: print(it.group("wahaha"))
🔸 守规矩:爬前先看 robots.txt,尊重网站规则。
🔸 有礼貌:设置访问间隔(如 time.sleep),别把服务器挤爆。
🔸 装得像:带上合理 User-Agent和请求头,模拟真人浏览器。
🔸 不越界:绝不爬取个人隐私、机密或明确禁止的数据。
🔸 存得好:妥善处理数据,注明来源,注意脱敏。