Python爬虫基础学习笔记|python爬虫学习23

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

运行结果:
Python爬虫基础学习笔记|python爬虫学习23
文章图片

如果正则表达式中出现匹配多个目标的情况:
# fidall 方法 import rehtml = """
  • 首页
  • 我的书架
  • 玄幻小说
  • 修真小说
  • 都市小说
  • 穿越小说
  • 网小说
  • 科幻小说
  • 排行榜单
  • 完本小说
  • 全部小说
"""result = re.findall('href.*?/(.*?)/">(.*?)<', html, re.S) print(type(result)) i = 0 for item in result: print(i, ':', item) i += 1

运行结果:每一个匹配的结果会构成一个元组再与其他结果形成一个列表
Python爬虫基础学习笔记|python爬虫学习23
文章图片

5. sub 在基础的查询操作上,若我们想对字符串进行修改,就需要用到sub方法
import recontent = 'as5af6fa5fa6fsfa' # 假如我们想要把其中的数字都去掉,在replace的方法外我们还可以通过sub方法实现 result = re.sub('\d+', '', content) print(result)

运行结果:
Python爬虫基础学习笔记|python爬虫学习23
文章图片

又回到之前的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后的结果:
    Python爬虫基础学习笔记|python爬虫学习23
    文章图片

    在这基础上,我们的正则匹配的结果:
    Python爬虫基础学习笔记|python爬虫学习23
    文章图片

    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爬虫学习23】今日结束,未完待续…

      推荐阅读