【Python】正则匹配之 .*?;爬虫 (.*?)实战讲解

前言

正则的知识体系其实是非常庞大的,它可以做规则校验、字符匹配等,且非常强大,速度也非常快,我这里针对字符串匹配作出讲解。通常不同的工作者对正则的使用手法层出不穷,所以我这里推荐一种比较好的方法——(.*?),当然这里需要感谢我大学大数据人工智能课程的任课老师,这种方法也是他在课堂上讲过的。

.*?讲解

.*?是对所有匹配规则的一种集合,又称通配符。通配符,顾名思义是指通用的字符, 用来模糊查找信息,通配符能够代替任意字符。有的学者称这种方法其为惰性匹配,其实我个人也是非常赞成这个名字的。

.*?的简单使用

import re

temp = '清风徐来水波不兴,哪个剧本没有分生,愈想证明就愈不肯定,可能完美和完整'
rule = re.compile('清风徐来(.*?),')
print(re.findall(rule,temp))

在这里插入图片描述

如上,我们想获取“水波不兴”,只需要知道它的前后是什么,“水波不兴”使用,*?进行通配,然后给通配加上括号进行选取,若不选取则不加括号。是不是非常简单,好那我们继续看看它在爬虫实战中是如何使用的

.*?的爬虫实战

目标网页

我以爬取链家为例,提取房屋的关键信息。https://dy.lianjia.com/ershoufang/rs/
在这里插入图片描述

代码分析

需要注意的是:字符串中有空格、换行符时需要做替换处理,否则.*?会匹配失败。我这里为了解耦,分两次进行匹配。

import requests
import re

res = requests.get('https://dy.lianjia.com/ershoufang/rs/').text
res = res.replace(' ','').replace('\n','')

data = re.findall(re.compile('<ulclass="sellListContent"log-mod="list">(.*?)</ul>'),res)
data = re.findall(re.compile('DATA"href="(.*?)"target.*?alt="(.*?)">.*?data-sl="">(.*?)</a>.*?houseIcon"></span>(.*?)</div>.*?spanclass="">(.*?)</span><i>(.*?)</i>.*?<span>(.*?)</span>'),data[0])
[print(i) for i in data]

效果展示

可以看到,效果是非常不错的。所以呀,赶紧去试试吧!
在这里插入图片描述

结语

这里给出我自己的一些经验和使用方法,以上用爬虫举例希望同学们能进一步加深对.*?以及它在数据处理应用中的理解。希望对大家的学习有所帮助,欢迎大家批评指正,我们一起学习!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会振刀的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值