
前言在网络数据采集体系中网页源码本质是结构化与非结构化交织的文本字符串正则表达式作为字符串匹配、筛选、提取的核心工具是 Python 爬虫体系里不可或缺的基础技能。相较于网页解析库正则表达式具备轻量化、运行速度快、适配纯文本场景广泛等优势尤其面对无固定标签格式、动态拼接文本、零散数据片段等场景时解析效率远超传统 DOM 解析方式。爬虫开发流程中绝大多数原始数据都存储在 HTML 源码、接口返回文本、日志内容、静态文本页面内熟练运用正则表达式完成精准数据提取能够大幅简化爬虫代码逻辑降低开发与维护成本。本文围绕 Python 环境下正则表达式的基础语法、核心元字符、匹配规则、实战提取案例展开系统性讲解结合爬虫真实网页文本场景设计代码示例同时剖析每一段代码的底层运行原理、使用场景与优劣特性。本文所使用的核心工具与第三方库官方链接如下Python 官方下载地址https://www.python.org/downloads/re 模块官方文档Python 内置正则库https://docs.python.org/3/library/re.htmlrequests 网络请求库爬虫核心请求工具https://pypi.org/project/requests/正则表达式在线测试工具语法校验https://regex101.com/全文从正则表达式基础概念切入逐步讲解基础语法、匹配模式、常用函数、爬虫实战案例兼顾理论知识与工程落地帮助爬虫初学者建立完整的正则使用思维掌握纯文本环境下的数据提取能力。一、正则表达式与爬虫的关联概述1.1 正则表达式定义正则表达式Regular Expression简称 Regex是一套用于描述字符串匹配规则的逻辑公式通过特定字符组合定义匹配模式实现对字符串的查找、匹配、截取、替换、分割等操作。其核心逻辑为利用预设规则遍历目标字符串筛选出符合规则的字符片段。在 Python 生态中re 模块是官方内置的正则表达式处理库无需额外安装随 Python 解释器自带也是爬虫领域使用频率最高的正则工具。由于无需额外依赖、调用简单、执行高效re 模块成为轻量化爬虫、简易数据提取场景的首选方案。1.2 正则在爬虫中的应用场景网络爬虫的核心动作分为网络请求与数据解析两大模块正则表达式主要服务于数据解析环节结合实际爬虫业务其典型应用场景可分为四类具体场景说明如下表所示表格应用场景场景描述正则表达式优势替代方案纯文本网页解析页面无规范 HTML 标签以纯文字、拼接字符串为主的静态页面无需解析 DOM 树直接匹配文本执行速度快BeautifulSoup、lxml接口返回文本提取接口返回非标准 JSON/XML为自定义拼接字符串、加密文本灵活适配不规则格式支持模糊匹配截取json、xml 解析库局部字段截取从完整 HTML 源码中提取手机号、邮箱、链接、编号等短字段语法简洁定位精准代码量少标签定位 字符串切片脏数据清洗去除源码中空白字符、注释、冗余标签、特殊符号支持批量替换、全局清除规则可复用字符串内置方法1.3 正则表达式的优缺点分析任何技术工具都存在适用边界在爬虫开发中明确正则表达式的优势与短板才能做到合理选型避免滥用导致代码可维护性下降。1.3.1 核心优势第一执行效率高。正则表达式底层由 C 语言实现字符串遍历与匹配速度远高于 Python 原生循环遍历面对数万字符的长文本、大批量页面解析时性能优势显著。 第二代码轻量化。完成复杂数据提取仅需一行匹配规则相较于多层标签定位、循环判断代码行数更少逻辑紧凑。 第三通用性强。正则语法属于跨语言通用规则Python、Java、JavaScript 等主流编程语言均支持标准正则语法学习一次可多场景复用。 第四适配不规则文本。对于格式混乱、标签缺失、动态生成的非标准网页源码DOM 解析库极易解析失败正则可通过模糊匹配完成数据提取。1.3.2 主要短板第一可读性较差。复杂正则规则由大量元字符拼接而成逻辑晦涩后期代码维护、规则修改难度大。 第二不适合结构化 HTML 解析。对于标签层级清晰、结构规范的标准网页使用 BeautifulSoup、lxml 等 DOM 解析库语义更清晰定位更精准。 第三语法容错率低。正则元字符、转义字符书写错误会直接导致匹配失效微小的格式偏差就会造成数据提取失败。基于以上特性爬虫开发通用选型原则为结构化标准 HTML 优先使用 DOM 解析库非标准文本、短字段提取、脏数据清洗优先使用正则表达式。二、Python re 模块基础认知2.1 re 模块安装与环境校验re 是 Python 标准内置库随 Python 安装包自带无需通过 pip 等工具额外安装。仅需保证 Python 环境正常运行即可直接导入使用。环境校验代码示例python运行# 导入内置正则模块 import re # 打印模块属性验证环境可用 print(re.__version__) print(re模块环境校验完成)代码原理解析import re执行模块导入操作将 Python 内置的正则处理模块加载至当前运行上下文模块内所有函数、类、常量均可直接调用。re.__version__调用模块内置版本属性用于验证模块是否正常加载若代码无报错、正常输出版本号则代表环境可用。该代码无业务逻辑仅作为开发前的环境自检是爬虫项目通用的前置校验步骤。2.2 re 模块字符转义规则Python 字符串与正则表达式存在双层转义问题这是初学者最容易出错的知识点。Python 中反斜杠\是字符串转义符正则表达式中\同样是元字符转义符双重转义会导致规则失效。针对该问题Python 提供原始字符串raw 字符串解决方案以字母r或R作为字符串前缀代表字符串内所有字符均为原始字符Python 解释器不再进行转义处理转义逻辑完全交由正则引擎执行。转义规则对比示例代码python运行# 普通字符串写法双层转义需书写两个反斜杠 str_normal \\d # 原始字符串写法推荐无需额外转义 str_raw r\d # 输出对比 print(普通字符串内容, str_normal) print(原始字符串内容, str_raw)代码原理解析普通字符串中\\代表一个原生反斜杠因此正则匹配数字的规则\d需要书写为\\d两层转义叠加极易出错。原始字符串r\d会屏蔽 Python 的字符串转义功能字符串内容原样传递给正则引擎正则引擎直接识别\d为数字元字符语法更直观。爬虫开发中强制推荐使用原始字符串编写正则规则从根源规避转义错误。2.3 re 模块核心常量re 模块内置多个常量用于控制正则匹配模式可修改正则引擎的匹配逻辑常用核心常量如下表表格常量名称简写功能说明爬虫使用场景re.IGNORECASEre.I忽略英文字母大小写匹配提取网页链接、英文标题、标签内容re.MULTILINEre.M多行匹配模式^和$匹配每行开头和结尾分行文本、分段网页内容提取re.DOTALLre.S让.元字符匹配换行符\n跨多行的长文本、嵌套标签提取re.VERBOSEre.X允许正则规则内添加注释、空格格式化编写超长复杂正则提升可读性常量使用方式分为两种单独使用与组合使用组合时使用|符号分隔多个常量。三、正则表达式基础元字符与匹配规则元字符是正则表达式的核心组成单元每一个元字符都具备专属匹配逻辑掌握基础元字符是编写正则规则的前提。本节结合爬虫常用场景分类讲解基础元字符、限定符、边界符并搭配代码案例演示使用方法。3.1 基础匹配元字符基础元字符用于匹配单一类型字符是正则最基础的构成元素也是爬虫提取手机号、数字、字母、符号的核心工具。3.1.1 通用字符元字符.点号匹配除换行符\n以外的任意单个字符。在默认模式下无法跨换行匹配搭配re.S常量后可匹配包含换行在内的所有字符。\d匹配任意数字字符等价于[0-9]爬虫中主要用于提取编号、价格、手机号、时间等数字内容。\D匹配任意非数字字符与\d作用相反。\w匹配字母、数字、下划线等价于[a-zA-Z0-9_]常用于匹配账号、用户名、链接参数。\W匹配非字母、非数字、非下划线的字符与\w作用相反。\s匹配空白字符包含空格、制表符\t、换行符\n、回车符\r常用于清洗网页冗余空白内容。\S匹配非空白字符与\s作用相反。单一元字符匹配示例代码python运行import re # 模拟爬虫获取的网页文本 html_text 商品价格99元编号SP202606名称Python爬虫教程 # 案例1使用\d匹配数字 res1 re.findall(r\d, html_text) print(匹配所有单个数字, res1) # 案例2使用\w匹配字母、数字、下划线 res2 re.findall(r\w, html_text) print(匹配所有字母与数字, res2) # 案例3使用\s匹配空白字符 res3 re.findall(r\s, html_text) print(匹配所有空白字符, res3)代码原理解析re.findall()是 re 模块高频函数作用为全局查找所有匹配成功的内容返回值为列表类型列表内每一个元素为一条匹配结果该函数是爬虫提取批量数据的首选函数。规则r\d表示匹配任意单个数字引擎遍历整个字符串将所有数字逐一提取并放入列表。规则r\w仅匹配字母、数字、下划线中文、标点符号会被直接忽略因此结果中无中文与冒号。规则r\s定位文本中所有空格实现空白字符的筛选可用于后续文本清洗。3.1.2 字符集[]字符集[]用于自定义匹配范围括号内填写需要匹配的字符正则引擎会匹配括号内任意一个字符。支持范围简写、取反操作语法规则如下[abc]匹配 a、b、c 中任意一个字符。[a-z]匹配所有小写英文字母[A-Z]匹配所有大写英文字母[0-9]匹配所有数字。[a-zA-Z0-9]组合范围匹配大小写字母与数字。[^abc]括号内首位添加^代表取反匹配除 a、b、c 以外的所有字符。字符集实战代码python运行import re # 模拟网页标题文本 title_text 教程编号A01, B02, C03, 价格88, 99, 128 # 匹配所有大写字母 res1 re.findall(r[A-Z], title_text) print(匹配大写字母, res1) # 匹配数字0-5 res2 re.findall(r[0-5], title_text) print(匹配0-5数字, res2) # 取反匹配非数字字符 res3 re.findall(r[^0-9], title_text) print(匹配非数字字符, res3)代码原理解析字符集[A-Z]限定匹配范围为大写英文字母仅提取文本中的 A、B、C。[0-5]限定数字范围为 0 到 5因此只会提取 0、1、2、36、8、9 等数字会被过滤。[^0-9]中^在字符集内部代表取反不再是边界符功能为匹配所有非数字内容包含中文、标点、字母、空格。3.2 数量限定符基础元字符仅能匹配单个字符而爬虫需要提取的手机号、编号、链接等内容均为连续多个字符数量限定符用于控制前面字符 / 字符集的匹配次数是正则规则中使用频率最高的语法单元。常用数量限定符汇总表表格限定符匹配规则含义说明爬虫实战场景匹配 1 次及以上至少出现 1 次无上限匹配连续数字、英文单词、长文本片段*匹配 0 次及以上可以不出现也可以无限次出现匹配可选内容、冗余标签、空白字符?匹配 0 次或 1 次最多出现 1 次匹配可选符号、可选前缀后缀{n}精准匹配 n 次严格匹配固定次数11 位手机号、固定长度编号、验证码{n,}匹配至少 n 次次数大于等于 n长编号、长链接、长数字串{n,m}匹配 n~m 次次数在 n 与 m 之间包含边界不定长用户名、短文本内容数量限定符分为贪婪匹配与非贪婪匹配正则引擎默认采用贪婪匹配即尽可能匹配最长的字符串在限定符后添加?可转为非贪婪匹配惰性匹配即尽可能匹配最短的字符串。这一特性在爬虫跨标签提取内容时至关重要。3.2.1 基础限定符实战结合爬虫数字提取场景演示、*、{n}等限定符的使用python运行import re # 模拟网页源码包含手机号、商品编号、随机数字 source_text 客服电话13800138000编号620260611临时码5空白后缀 # 案例1 匹配1次及以上连续数字 res1 re.findall(r\d, source_text) print(连续数字片段, res1) # 案例2{11} 精准匹配11位手机号 res2 re.findall(r\d{11}, source_text) print(11位手机号, res2) # 案例3* 匹配0次或多次数字 res3 re.findall(r\d*, source_text) print(0次或多次数字, res3)代码原理解析r\d\d匹配单个数字限定数字至少出现 1 次因此会将文本中所有连续的数字串整体提取拆分出手机号、编号、临时码三组内容是提取连续数字的通用写法。r\d{11}严格限定数字长度为 11 位精准匹配国内 11 位手机号过滤掉长度不符的编号与单个数字适用于固定长度字段提取。r\d*允许数字出现 0 次因此在无数字的文本位置会匹配出空字符串最终结果包含大量空元素该特性常用于匹配可选数字前缀。3.2.2 贪婪匹配与非贪婪匹配网页 HTML 源码存在大量成对标签例如div内容/div、a链接/a默认贪婪匹配会一次性匹配多个标签内容造成数据提取错误非贪婪匹配是解决该问题的核心方案。匹配模式对比代码python运行import re # 模拟嵌套标签的HTML源码爬虫高频场景 html div标题1/divdiv标题2/divdiv标题3/div # 贪婪匹配.* 尽可能匹配最长内容 greedy_res re.findall(rdiv.*/div, html) print(贪婪匹配结果, greedy_res) # 非贪婪匹配.*? 尽可能匹配最短内容 lazy_res re.findall(rdiv.*?/div, html) print(非贪婪匹配结果, lazy_res)代码原理解析贪婪匹配规则div.*/div中.*会从第一个div开始一直匹配到最后一个/div将整段文本作为一个结果返回无法拆分单个标签内容在多标签场景下完全失效。非贪婪匹配规则div.*?/div在*后添加?强制引擎匹配到第一个/div就终止匹配依次拆分出每一个 div 标签内的内容符合爬虫逐行提取标签数据的需求。核心结论爬虫解析成对标签、截取中间内容时必须使用非贪婪匹配这是正则解析 HTML 的通用规范。3.3 边界匹配符边界符用于限定匹配内容的位置区分字符串开头、结尾、单词边界避免局部匹配造成的数据干扰常用于精准匹配整行内容、独立字段。常用边界符^匹配字符串开头搭配re.M多行模式时匹配每一行的开头。$匹配字符串结尾搭配re.M多行模式时匹配每一行的结尾。\b匹配单词边界区分独立单词与字符串片段。边界符实战代码python运行import re # 模拟分行文本多行网页内容 multi_text 网址https://www.test.com 网址https://www.demo.com 无效链接https://xxx.com.cn # 多行模式 ^ 匹配行开头内容 res re.findall(r^网址.*, multi_text, re.M) print(行开头匹配结果, res)代码原理解析文本为多行格式添加re.M多行模式后^不再仅匹配整个字符串开头而是匹配每一行的行首。规则^网址.*表示提取行首以 “网址” 开头的整行内容自动过滤行首为 “无效链接” 的行实现按行精准筛选。边界符不占用字符位置仅做位置判断不会出现在最终匹配结果中。四、re 模块核心函数详解与爬虫应用掌握元字符规则后需要结合 re 模块函数实现匹配、查找、替换、分割等业务逻辑。本节讲解爬虫开发中六大核心函数包含函数语法、参数说明、实战案例与原理剖析覆盖 90% 以上的正则使用场景。4.1 re.findall () 全局查找函数4.1.1 函数语法python运行re.findall(pattern, string, flags0)pattern正则匹配规则原始字符串string待匹配的目标字符串网页源码、文本内容flags匹配模式常量可选参数返回值列表所有匹配成功的字符串无匹配内容则返回空列表。4.1.2 爬虫应用与原理findall()是爬虫使用频率最高的函数核心作用是一次性提取所有符合规则的数据适合批量提取链接、标题、手机号、价格等多条数据。该函数会从头到尾遍历目标字符串将每一个匹配成功的片段存入列表遍历完成后统一返回结果。实战案例提取网页中所有链接地址python运行import re # 模拟爬取到的HTML源码 html_source a hrefhttps://www.baidu.com百度/a a hrefhttps://www.csdn.netCSDN/a a hrefhttps://www.python.orgPython官网/a # 正则规则提取href属性内的链接 link_pattern rhref(.*?) link_list re.findall(link_pattern, html_source) # 遍历输出所有链接 print(提取到的所有链接) for link in link_list: print(link)代码原理解析规则href(.*?)使用非贪婪匹配定位双引号之间的链接内容findall()会全局匹配所有符合规则的片段。函数遍历整个 HTML 字符串依次捕获三个 a 标签内的 href 值存入列表返回实现批量链接提取。该案例是正则提取网页链接的标准写法适用于简易静态页面的链接采集。4.2 re.search () 单次查找函数4.2.1 函数语法python运行re.search(pattern, string, flags0)返回值匹配对象Match 对象找到第一个匹配内容即终止遍历无匹配则返回None。取值方式通过group()方法获取匹配结果。4.2.2 爬虫应用与原理search()只查找第一个符合规则的内容找到后立即停止遍历执行效率高于findall()适合仅需要提取单条数据的场景例如页面唯一标题、唯一主链接、页面状态码等。实战案例提取页面第一个手机号python运行import re text 联系电话13912345678备用电话13787654321 # 匹配11位手机号 phone_res re.search(r\d{11}, text) # 判断是否匹配成功 if phone_res: print(第一个手机号, phone_res.group()) else: print(未匹配到手机号)代码原理解析search()从字符串开头向后遍历匹配到第一个 11 位手机号后直接终止运行不会继续查找备用电话。函数返回 Match 对象无法直接打印内容必须调用group()方法提取字符串结果。增加if判断是爬虫开发的规范写法防止无匹配内容时调用group()触发程序报错。4.3 re.match () 开头匹配函数4.3.1 函数语法python运行re.match(pattern, string, flags0)功能仅从字符串开头进行匹配开头不符合规则则直接返回None不会向后遍历。4.3.2 爬虫应用与原理match()的使用场景较少主要用于校验字符串前缀例如校验接口返回内容前缀、校验链接协议http/https、校验文本开头标识。实战案例校验链接是否为 https 协议python运行import re url1 https://www.test.com url2 http://www.demo.com # 匹配开头为https的链接 res1 re.match(rhttps, url1) res2 re.match(rhttps, url2) print(url1匹配结果, res1.group() if res1 else 不匹配) print(url2匹配结果, res2.group() if res2 else 不匹配)代码原理解析match()仅检测字符串最前端内容url1以 https 开头匹配成功url2以 http 开头匹配失败。该函数不适合用于全局查找仅做前缀校验爬虫中多用于链接合法性初步筛选。4.4 re.split () 字符串分割函数4.4.1 函数语法python运行re.split(pattern, string, maxsplit0, flags0)功能根据正则规则对字符串进行分割返回分割后的列表相较于 Python 原生split()支持动态规则分割可适配不规则分隔符。4.4.2 爬虫应用与原理爬虫获取的文本经常出现混合分隔符逗号、空格、顿号、换行混用原生字符串分割无法处理re.split()可通过正则规则统一分割。实战案例混合分隔符分割文本python运行import re # 混合逗号、空格、顿号的文本 data Python,Java C、Go PHP # 规则匹配逗号、空格、顿号任意一种符号进行分割 split_list re.split(r[, 、], data) print(分割结果, split_list)代码原理解析正则规则[, 、]为字符集匹配逗号、空格、顿号三类分隔符统一按照该规则分割字符串。原生split()仅支持单一分隔符而re.split()借助正则实现多分隔符同时分割是文本清洗的常用工具。4.5 re.sub () 字符串替换函数4.5.1 函数语法python运行re.sub(pattern, repl, string, count0, flags0)repl替换后的字符串count限定替换次数0 代表全局替换返回值替换完成后的新字符串。4.5.2 爬虫应用与原理re.sub()是爬虫脏数据清洗的核心函数用于去除网页冗余标签、空白字符、注释、特殊符号、广告内容等。实战案例清除 HTML 中的所有标签python运行import re # 带HTML标签的文本 html h1爬虫教程/h1p正则表达式使用讲解/p # 正则规则匹配所有标签替换为空字符 clean_text re.sub(r.*?, , html) print(清洗后文本, clean_text)代码原理解析规则.*?使用非贪婪匹配精准匹配每一个 HTML 标签将标签内容全部替换为空字符串。实现标签剥离仅保留纯文本内容完成网页数据清洗是正则清洗 HTML 的经典用法。4.6 re.compile () 正则编译函数4.6.1 函数语法python运行re.compile(pattern, flags0)功能将正则规则编译为正则对象后续可重复调用该对象执行匹配、查找、替换操作。4.6.2 爬虫应用与原理正则表达式每次执行匹配时Python 都会先编译规则再执行匹配。如果同一规则需要重复使用数十次、数百次例如循环爬取多个页面使用compile()预编译规则可省去重复编译的开销大幅提升运行效率是批量爬虫的性能优化手段。实战案例预编译规则批量提取数据python运行import re # 预编译正则规则提取11位手机号 phone_pattern re.compile(r\d{11}) # 多个页面文本重复使用同一规则 page1 页面1电话13800001111 page2 页面2电话13900002222 page3 页面3电话13700003333 # 调用编译后的对象执行findall p1 phone_pattern.findall(page1) p2 phone_pattern.findall(page2) p3 phone_pattern.findall(page3) print(p1, p2, p3)代码原理解析re.compile()在程序运行初期完成规则编译生成独立的正则对象后续多次调用无需重复编译。在循环爬取几十、上百个页面的场景下预编译能有效降低 CPU 开销提升爬虫整体运行速度是工程级爬虫的标准写法。五、综合实战爬虫完整案例 —— 静态页面数据提取前文已完成正则语法、模块函数的讲解本节结合真实爬虫流程整合网络请求、正则提取、数据清洗全流程实现完整的实战案例。案例分为两部分使用 requests 库请求静态网页再通过正则表达式提取页面内的标题、价格、商品编号三类核心数据。5.1 案例整体流程导入依赖库requests网络请求、re正则提取发送网络请求获取网页原始 HTML 源码对源码进行基础清洗去除多余空白字符编写多条正则规则分别提取商品标题、价格、编号数据整合与结果输出。5.2 完整实战代码python运行import requests import re # 1. 目标模拟网页地址本地模拟文本也可替换为真实静态URL # 模拟爬取到的电商页面HTML源码 html_content div classgoods h2商品名称Python爬虫实战教程/h2 span商品编号GOODS2026061101/span p售价129元/p /div div classgoods h2商品名称正则表达式精讲/h2 span商品编号GOODS2026061102/span p售价89元/p /div div classgoods h2商品名称Web数据采集进阶/h2 span商品编号GOODS2026061103/span p售价159元/p /div # 2. 预编译正则规则批量提取优化性能 # 提取商品标题 title_rule re.compile(rh2商品名称(.*?)/h2) # 提取商品编号 id_rule re.compile(rspan商品编号(.*?)/span) # 提取商品价格数字 price_rule re.compile(rp售价(\d)元/p) # 3. 执行数据提取 title_list title_rule.findall(html_content) id_list id_rule.findall(html_content) price_list price_rule.findall(html_content) # 4. 整合数据并格式化输出 print( 爬虫数据提取结果 ) for index in range(len(title_list)): print(f第{index1}件商品) print(f商品名称{title_list[index]}) print(f商品编号{id_list[index]}) print(f商品价格{price_list[index]} 元\n)5.3 代码分层原理详解5.3.1 库导入与模拟源码部分import requests, re完成两大核心库导入requests用于向目标服务器发送 HTTP 请求获取远程网页源码本案例使用模拟 HTML 字符串替代远程请求便于本地调试实际项目中替换为requests.get(url).text即可获取真实网页源码。模拟 HTML 源码还原了电商静态页面的典型结构包含多层 div 嵌套、h2、span、p 等基础标签是正则解析 HTML 的标准测试场景。5.3.2 正则规则预编译部分针对三类需要提取的数据分别使用re.compile()预编译规则标题规则rh2商品名称(.*?)/h2使用非贪婪匹配截取 h2 标签中间的文本内容括号为基础分组后续章节详解用于单独捕获目标数据。编号与价格规则逻辑与标题规则一致根据标签特征编写对应匹配规则精准定位目标字段。批量数据提取场景下预编译规则保证多次匹配的执行效率符合工程化爬虫开发规范。5.3.3 数据提取与整合部分调用编译后的正则对象findall()方法全局提取所有符合规则的内容分别存入三个列表列表顺序与页面商品顺序一一对应。通过for循环遍历列表按索引一一匹配标题、编号、价格实现数据整合输出。该逻辑适用于列表式网页数据提取是正则爬虫最常用的数据组织方式。5.4 案例拓展远程真实网页适配将模拟源码替换为真实网络请求代码即可实现线上静态页面爬取拓展代码如下python运行import requests import re # 目标静态网页URL替换为实际业务地址 target_url https://xxx.xxx.com/static.html # 请求头模拟浏览器访问防止被拦截 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } # 发送GET请求获取网页源码 response requests.get(target_url, headersheaders, timeout10) # 设置编码防止中文乱码 response.encoding utf-8 html_content response.text # 后续正则提取代码与上文完全一致拓展原理添加headers请求头模拟浏览器规避基础反爬机制是 Python 爬虫的必备配置。timeout设置请求超时时间防止目标服务器无响应导致程序卡死。encoding手动指定编码解决网页中文乱码问题保证正则规则正常匹配中文内容。六、正则表达式使用注意事项与基础排错结合爬虫初学者的高频问题本节总结正则表达式使用规范、常见错误、排错思路帮助开发者降低代码故障率。6.1 书写规范强制使用原始字符串所有正则规则统一使用r原始字符串彻底解决 Python 与正则双层转义问题。长规则拆分注释复杂正则搭配re.X模式添加注释提升可读性禁止编写无注释的超长正则。批量场景预编译循环爬取多页面、同一规则重复调用时必须使用re.compile()预编译优化性能。优先非贪婪匹配解析成对 HTML 标签、截取中间文本时默认使用.*?非贪婪模式。6.2 高频错误与解决方案6.2.1 转义字符错误现象规则书写正确但完全无法匹配内容。 原因未使用原始字符串反斜杠被 Python 提前转义正则引擎接收错误规则。 解决方案统一将正则规则改为r规则内容格式。6.2.2 贪婪匹配导致数据错乱现象多条数据被合并为一条结果。 原因使用.*贪婪匹配跨多个标签合并内容。 解决方案替换为.*?非贪婪匹配。6.2.3 换行符导致匹配失败现象跨多行的长文本无法匹配。 原因默认模式下.无法匹配换行符\n。 解决方案匹配函数添加re.S参数开启 DOTALL 模式。6.2.4 大小写不匹配现象英文字母内容匹配缺失。 原因正则区分大小写网页字母大小写不统一。 解决方案添加re.I参数开启忽略大小写模式。6.3 排错通用流程第一步将正则规则复制到正则在线测试工具粘贴目标文本验证规则本身是否有效第二步检查 Python 代码是否使用原始字符串排查转义问题第三步根据文本是否换行、字母大小写补充对应的模式常量第四步检查匹配函数选择是否正确批量用 findall单条用 search第五步运行代码打印中间文本确认待匹配字符串是否与预期一致。七、本章总结本文完整讲解了 Python 爬虫体系中基础正则表达式的全部核心知识点从理论概念、元字符语法、模块函数到实战案例、排错方案形成完整知识闭环。正则表达式作为轻量化数据提取工具在非标准文本、短字段提取、数据清洗场景中具备不可替代的优势。通过本文学习可掌握以下核心能力第一理解正则表达式在爬虫中的定位与选型原则第二熟练运用基础元字符、限定符、边界符编写匹配规则第三掌握 re 模块六大核心函数的使用场景与调用方式第四独立完成 “网络请求 正则提取 数据清洗” 的完整爬虫流程第五排查正则匹配过程中的常见错误。基础正则是进阶学习分组匹配、复杂规则、正则高阶用法的前提下一部分将基于本文内容讲解正则分组、嵌套匹配、复杂内容提取等进阶知识点进一步提升复杂场景下的数据提取能力。