Python_爬虫系列_3.Re(正则表达式)
前言
毋庸置疑,regex的重要性,不言而喻,那里都是需要用到他的,那就让我们开始吧
一、Re是什么?
正则表达式是用来简洁表达一组字符串的表达式
正则表达式是一种针对字符串表达“简洁”和“特征”思想的工具
正则表达式可以用来判断某字符串的特征归
二、Re的语法
正则表达式语法由字符和操作符构成
1,常用操作符
2,实例
3,python的Re库
- re.search(pattern, string, flags=0) ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙
string : 待匹配字符串 ∙ flags : 正则表达式使用时的控制标记 在一个字符串中搜索匹配正则表达式的第一个位置
返回match对象
- re.match(pattern, string, flags=0) ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙
string : 待匹配字符串 ∙ flags : 正则表达式使用时的控制标记 从一个字符串的开始位置起匹配正则表达式
返回match对象
- re.findall(pattern, string, flags=0) ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙
string : 待匹配字符串 ∙ flags : 正则表达式使用时的控制标记 搜索字符串,以列表类型返回全部能匹配的子串
- re.split(pattern, string, maxsplit=0, flags=0) ∙ pattern :
正则表达式的字符串或原生字符串表示 ∙ string : 待匹配字符串 ∙ maxsplit: 最大分割数,剩余部分作为最后一个元素输出
∙ flags : 正则表达式使用时的控制标记 将一个字符串按照正则表达式匹配结果进行分割 返回列表类型
- re.finditer(pattern, string, flags=0) ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙
string : 待匹配字符串 ∙ flags : 正则表达式使用时的控制标记 搜索字符串,返回一个匹配结果的迭代类型,每个迭代
元素是match对象
- re.sub(pattern, repl, string, count=0, flags=0) ∙ pattern :
正则表达式的字符串或原生字符串表示 ∙ repl : 替换匹配字符串的字符串 ∙ string : 待匹配字符串 ∙ count :
匹配的最大替换次数 ∙ flags : 正则表达式使用时的控制标记 在一个字符串中替换所有匹配正则表达式的子串 返回替换后的字符串
3.另一种用法
>>> rst = re.search(r'[1‐9]\d{5}', 'BIT 100081')
#与下面的一种等价的
>>> pat = re.compile(r'[1‐9]\d{5}')
>>> rst = pat.search('BIT 100081')
- regex = re.compile(pattern, flags=0) ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙
flags : 正则表达式使用时的控制标记
4.最小匹配和贪婪匹配
#贪婪匹配
>>> match = re.search(r'PY.*N', 'PYANBNCNDN')
>>> match.group(0)
'PYANBNCNDN'
#最小匹配
>>> match = re.search(r'PY.*?N', 'PYANBNCNDN')
>>> match.group(0)
'PYAN'
三,案例
代码如下(示例):
import requests
import re
url = 'http://www.cntour.cn/'
strhtml = requests.get(url) # get方式,获取网页数据
#print(strhtml.text)
#指定lxml解析器,将HTML文档转换成树形结构
#pattern = r'<li class="top"><a target="_blank" href="(.+)" title="(.+)">.+</a></li>'
#pattern1=r'<li class="top"><a target="_blank" href="(.+)" title="(.+)">.+</a></li>'
pattern=r'<li class=".+"><a target="_blank" href="(.+)" title="(.+)">.+</a></li>'
#<a target="_blank" href="http://www.cntour.cn/news/19059/" title="文旅部:国有景区年底实现在线预约">文旅部:国有景区年底实现在线预约</a>
data = re.findall(pattern, strhtml.text)
print(data)
# soup匹配到的有多个数
#print(len(data))
for i in data:
print(i)
for item in data:
href, name = item
result = {
'title': name, # 标题
'link': href, # 超链接
#'ID': re.findall('\d+', item.get('href'))
}
print(result)
四,总结
吸收,汲取,成为更好的自己
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)