Python爬虫常用正则表达式分类与示例


Python爬虫常用正则表达式分类与示例


一、基础匹配规则
  1. 电话号码
    \b\d{3}-\d{8}\b\b\d{4}-\d{7}\b
    示例:匹配 010-86432100 等格式。

    import re
    text = "Phone: 010-86432100, 021-1234567"
    phones = re.findall(r'\b\d{3}-\d{8}\b|\b\d{4}-\d{7}\b', text)  # 结果: ['010-86432100']
    
  2. 邮箱地址
    \b\w+@\w+\.\w+\b
    示例:匹配 [email protected] 等标准邮箱。


二、URL与路径匹配
  1. HTTP链接
    \bhttp.*?(png|jpg|jpeg)\b
    用途:精准匹配图片链接后缀(如 .png.jpg)。

    text = "background-image: url(https://example.com/image.png);"
    image_url = re.search(r'\bhttp.*?png\b', text).group()  # 结果: 'https://example.com/image.png'
    
  2. 通用URL
    \bhttps?://\S+\b
    说明:匹配以 http://https:// 开头的所有链接。


三、数值与特殊字符提取
  1. 整数与浮点数

    • 整数\d+
    • 浮点数[-+]?[0-9]*\.?[0-9]+
      示例:提取库存、价格等数值。
    text = "库存5000件,价格565656.23元"
    nums = re.findall(r'\d+|[-+]?[0-9]*\.?[0-9]+', text)  # 结果: ['5000', '565656.23']
    
  2. 中文文本
    [^\x00-\xff]
    用途:过滤非ASCII字符,提取中文内容。


四、进阶处理技巧
  1. 贪婪与非贪婪匹配

    • 贪婪.*(尽可能多匹配)
    • 非贪婪.*?(尽可能少匹配)
      示例:提取最短满足条件的字符串。
  2. 多行与空格处理
    修饰符(?s)(忽略换行)、(?i)(忽略大小写)
    示例:匹配含换行的文本。

    text = "INSERT INTO users\nVALUES (1, 'John')"
    pattern = re.compile(r'(?i)insert\s+into.*?\(', re.DOTALL)
    

五、Python re 模块核心方法
方法 用途 示例
re.findall() 返回所有匹配结果的列表 re.findall(r'\d+', text)
re.search() 返回首个匹配对象(支持跨行匹配) re.search(r'\bhttp.*?png\b', text)
re.sub() 替换匹配内容 re.sub(r'\d+', 'X', text)
re.compile() 预编译正则表达式提升效率 pattern = re.compile(r'\w+')

实战应用场景

  • 数据清洗:去除HTML标签(<.*?>)或特殊符号。
  • 动态内容提取:结合 Selenium 获取页面源码后,用正则解析JS生成的内容。
  • 反爬对抗:匹配动态变化的Class名或ID(如 class="item_123"r'class="item_\d+"')。

总结

正则表达式是爬虫数据处理的核心工具,需重点掌握元字符(如 \d\w)、量词(如 +?)、修饰符(如 (?s))的使用。通过灵活组合规则,可高效提取文本、URL、数值等结构化数据,适配动态渲染或静态页面场景。

你可能感兴趣的:(Python爬虫常用正则表达式分类与示例)