python爬虫学习23

python爬虫学习23

目录

    • python爬虫学习23
      • 三、正则表达式
        • 4. findall 方法
        • 5. sub
        • 6. compile

三、正则表达式

4. findall 方法

之前我们学习了search与match方法各自的作用与不足,昨天的学习中我们知道在使用search方法后,可以有效避免match方法必须从开头匹配字符串的不足,但是search本身也有很大的缺陷,即只能找到第一个符合条件的结果。

这个时候我们若想要匹配出所有可能的结果,就需要用到findall(从字面意义上看,我们就能很直观地知道这个方法是干什么的)

把昨天的html文本拿过来,依旧匹配其中所有的小说类别


        
		

应用findall方法:

# fidall 方法
import re

html = """

        
		
"""
result = re.findall('href.*?xiaoshuo/">(.*?)<', html, re.S) print(type(result)) # 由结果可知,findall方法最终会返回一个列表 i = 0 for item in result: print(i, ':', item) i += 1

运行结果:

python爬虫学习23_第1张图片

如果正则表达式中出现匹配多个目标的情况:

# fidall 方法
import re

html = """

        
		
"""
result = re.findall('href.*?/(.*?)/">(.*?)<', html, re.S) print(type(result)) i = 0 for item in result: print(i, ':', item) i += 1

运行结果:每一个匹配的结果会构成一个元组再与其他结果形成一个列表

python爬虫学习23_第2张图片

5. sub

在基础的查询操作上,若我们想对字符串进行修改,就需要用到sub方法

import re

content = 'as5af6fa5fa6fsfa'
# 假如我们想要把其中的数字都去掉,在replace的方法外我们还可以通过sub方法实现
result = re.sub('\d+', '', content)
print(result)

运行结果:

python爬虫学习23_第3张图片

又回到之前的html文本,如果我们想要获取其中所有的中文,直接写一个正则就可能会很麻烦(当然这里其实很简单),这时候我们可以用sub与findall搭配使用:

import re

html = """

        
		
"""
result = re.sub('', '', html, re.S) print(result) result1 = re.findall('
  • (.*?)', result, re.S) for item in result1: print(item)
  • 使用sub后的结果:

    python爬虫学习23_第4张图片

    在这基础上,我们的正则匹配的结果:

    python爬虫学习23_第5张图片

    6. compile

    compile方法可以将正则字符串编译成正则表达式对象:

    import re
    
    text1 = '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爬虫学习23_第6张图片

    至此我们对于正则表达式的相关内容已经学习完了,是不是感觉我们的知识体系又充实了一大部分?

    今日结束,未完待续…

    你可能感兴趣的:(Python爬虫基础学习笔记,python,爬虫,学习)