逆向爬虫02 re模块

python re模块

re是python中自带的正则表达式模块,可以用于正则匹配

1. findall() 将匹配到的所有结果塞进列表并返回

import re
# 匹配字符串中的所有字符'a'
result = re.findall("a", "我是一个abcdefag")
print(result)	# ['a', 'a']

# 匹配字符串中的所有数字
result = re.findall(r"\d+", "我今年18岁,我有2000块")	# 因为反斜杠'\'在字符串中会被当做转移功能,所以要在字符串前面加r
print(result)	# ['18', '2000']

2. finditer() 将匹配到的所有结果塞进迭代器并返回,迭代器中存放的是match对象,需要调用.group()获取匹配结果,迭代器可以优化程序性能,当能匹配到多个对象是,优先使用finditer()

import re
# 匹配字符串中的所有数字
result = re.finditer(r"\d+", "我今年18岁,我有2000块")
print(result)	# <callable_iterator object at 0x0000027D4A293580>
for item in result:
    print(item) # <re.Match object; span=(3, 5), match='18'> <re.Match object; span=(9, 13), match='2000'>
    print(item.group())	# 18, 2000

3. search() 它只返回一个match对象,该对象是finditer()匹配到的第一个对象

import re

result = re.search(r"\d+", "我叫周杰伦,今年32岁,我的班级是3年2班")
print(result.group())	# 32

4. match() 它只返回一个match对象,不同的是match相当于在正则匹配表达式前加上了’^’,即只从字符串开头匹配

import re

result = re.match(r"\d+", "9527,我的编号是9527")		# 正则表达式相当于是r"^\d+"
print(result.group())	# 9527

5. compile() 预加载正则表达式,相当于将正则表达式存储到一个变量中,方便后面调用,而不需要每次都申请内存

import re

obj = re.compile(r"\d+")
result = obj.findall("我叫周杰伦,今年32岁,我的班级是3年2班")
print(result)	# ['32', '3', '2']

6. 如何从正则中提取到我们想要的数据

# 将想要提取的数据用小括号括起来,可以单独取名字
# (?P<名字>正则)
# 提取数据的时候,需要group("名字")
import re

s = """
    <div class='⻄游记'><span id='10010'>中国联通</span></div>
    <div class='⻄游记'><span id='10086'>中国移动</span></div>
"""
# 想要获取上述字符串中的id和text信息
obj = re.compile(r"<span id='(?P<id>\d+)'>(?P<name>.*?)</span>")
result = obj.finditer(s)
for item in result:
    id = item.group("id")
    name = item.group("name")
    print(id, name)	# 10010 中国联通	10086 中国移动
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值