python爬虫学习23
目录
-
- python爬虫学习23
-
- 三、正则表达式
-
- 4. findall 方法
- 5. sub
- 6. compile
三、正则表达式
4. findall 方法 之前我们学习了search与match方法各自的作用与不足,昨天的学习中我们知道在使用search方法后,可以有效避免match方法必须从开头匹配字符串的不足,但是search本身也有很大的缺陷,即只能找到第一个符合条件的结果。
这个时候我们若想要匹配出所有可能的结果,就需要用到findall(从字面意义上看,我们就能很直观地知道这个方法是干什么的)
把昨天的html文本拿过来,依旧匹配其中所有的小说类别
- 首页
- 我的书架
- 玄幻小说
- 修真小说
- 都市小说
- 穿越小说
- 网游小说
- 科幻小说
- 排行榜单
- 完本小说
- 全部小说
应用findall方法:
# fidall 方法
import rehtml = """
- 首页
- 我的书架
- 玄幻小说
- 修真小说
- 都市小说
- 穿越小说
- 网游小说
- 科幻小说
- 排行榜单
- 完本小说
- 全部小说
"""result = re.findall('href.*?xiaoshuo/">(.*?)<', html, re.S)
print(type(result)) # 由结果可知,findall方法最终会返回一个列表
i = 0
for item in result:
print(i, ':', item)
i += 1
运行结果:
文章图片
如果正则表达式中出现匹配多个目标的情况:
# fidall 方法
import rehtml = """
- 首页
- 我的书架
- 玄幻小说
- 修真小说
- 都市小说
- 穿越小说
- 网小说
- 科幻小说
- 排行榜单
- 完本小说
- 全部小说
"""result = re.findall('href.*?/(.*?)/">(.*?)<', html, re.S)
print(type(result))
i = 0
for item in result:
print(i, ':', item)
i += 1
运行结果:每一个匹配的结果会构成一个元组再与其他结果形成一个列表
文章图片
5. sub 在基础的查询操作上,若我们想对字符串进行修改,就需要用到sub方法
import recontent = 'as5af6fa5fa6fsfa'
# 假如我们想要把其中的数字都去掉,在replace的方法外我们还可以通过sub方法实现
result = re.sub('\d+', '', content)
print(result)
运行结果:
文章图片
又回到之前的html文本,如果我们想要获取其中所有的中文,直接写一个正则就可能会很麻烦(当然这里其实很简单),这时候我们可以用sub与findall搭配使用:
import rehtml = """
- 首页
- 我的书架
- 玄幻小说
- 修真小说
- 都市小说
- 穿越小说
- 网游小说
- 科幻小说
- 排行榜单
- 完本小说
- 全部小说
"""
result = re.sub('', '', html, re.S)
print(result)
result1 = re.findall('(.*?)', result, re.S)
for item in result1:
print(item)
使用sub后的结果:
文章图片
在这基础上,我们的正则匹配的结果:
文章图片
6. compile compile方法可以将正则字符串编译成正则表达式对象:
import retext1 = '2020-03-28 20:00'
# 假设现在有多段不同的html文本,我们想要匹配其中的某些相同的元素如中文歌名等,这时对于每段html我们都要传入相同的表达式(假设表达式相同),与re.S等修饰器内容
# 这样就不如先把它们集成成一个对象,方便以后代码的复用
pattern = re.compile('\d{2}:\d{2}', re.S)
# 把它编译成一个对象以后就可以实现代码的复用,就不用每次遇到都要重新输入'\d{2}:\d{2}'
result = re.sub(pattern, '', text1)
print(result)
运行结果:
文章图片
至此我们对于正则表达式的相关内容已经学习完了,是不是感觉我们的知识体系又充实了一大部分?
【Python爬虫基础学习笔记|python爬虫学习23】今日结束,未完待续…
推荐阅读
- Python爬虫基础学习笔记|python爬虫学习22
- Python爬虫基础学习笔记|python爬虫学习21
- python|python爬虫学习30
- Python爬虫基础学习笔记|python爬虫学习14
- #yyds干货盘点#python包
- Python求列表中最大,最小,第二大,第二最小值
- 使用 Sanic 框架进行 Python Web 开发
- #yyds干货盘点#List移除某个值remove - python基础学习系列
- Python Kivy .kv文件介绍和用法示例