Python使用正则表达式提取div标签内文本详解

追风的人
追风的人
发布时间:2026-10-13| 6人浏览过
原创

本文介绍如何在Python中从HTML的div标签中提取纯文本。通过结合使用re.compile编译正则表达式与re.sub进行替换,配合BeautifulSoup解析HTML结构,可有效去除标签符号。文中详细解析了正则编译标志及原生字符串的使用,并提供了完整的抓取与保存示例代码。

预备知识点

compile 函数

compile 函数的主要作用是将正则表达式字符串编译为一个 Pattern 对象,以便后续在 match() 和 search() 等函数中重复使用,从而提高匹配效率。

其语法格式如下:

re.compile(pattern[, flags])
.compile(pattern[, flags])

相关参数说明:

pattern:指定一个字符串形式的正则表达式模式。

flags:可选参数,用于定义匹配模式,例如是否忽略大小写或多行匹配等。具体可用的标志值包括:

re.I:忽略大小写匹配。

re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 的匹配行为依赖于当前本地环境设置。

re.M:启用多行模式,使 ^ 和 $ 匹配每行的开头和结尾。

re.S:使点号(.)匹配包括换行符在内的所有字符,默认情况下点号不匹配换行符。

re.U:表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 的匹配行为依赖于 Unicode 字符属性数据库。

re.X:为了增强正则表达式的可读性,允许忽略模式中的空白字符,并忽略 # 符号后的注释内容。

检索和替换

Python 的 re 模块提供了 re.sub 函数,用于在字符串中查找匹配正则表达式的子串,并将其替换为指定的内容。

该函数的语法结构如下:

re.sub(pattern, repl, string, count=0)
.sub(pattern, repl, string, count=0)

参数详解:

pattern:正则表达式中的模式字符串。

repl:用于替换匹配结果的字符串,或者是一个执行替换逻辑的函数。

string:需要进行查找和替换操作的原始字符串。

count:指定替换的最大次数,默认为 0,表示替换所有匹配到的子串。

在 Python 字符串前添加 r 前缀表示使用原生字符串(Raw String)。在大多数编程语言中,正则表达式使用反斜杠(\)作为转义字符,这可能导致代码中需要大量反斜杠来转义反斜杠本身。例如,若要匹配文本中的单个反斜杠,在普通字符串中正则表达式需写成四个反斜杠(\\\\),前两个用于在编程语言层面转义为一个反斜杠,后两个用于在正则引擎中再转义为一个。使用原生字符串 r"\\" 可以简化这一过程,使表达式更直观且不易出错。同理,匹配数字的模式 \d 可简写为 r"\d"。

思路整理:

以下梳理了编程过程中遇到的典型问题及解决方案,供参考。

问题1:在编程过程中成功获取了目标的名字,但它被包裹在 div 标签中。我们需要将 div 中的纯文字与 HTML 标签分离,此处采用正则表达式来实现。

问题2:

具体实现代码如下:

<span style="color:#000000"># -*- coding: UTF-8 -*-
import requests
import time
import re
from bs4 import BeautifulSoup
from urllib.request import urlretrieve
 
if __name__ == '__main__':
  list_url = []
  url = 'https://www.names.org/n/kevin/about'
  #设置请求头信息
  headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
  }
  req = requests.get(url=url,headers=headers)
  req.encoding='utf-8'
  html=req.text
  bf = BeautifulSoup(html,'html.parser')
  targets_url_1 = bf.find_all(class_='container page-section')
  bf = BeautifulSoup(str(targets_url_1),'html.parser')
  targets_url_2 = bf.find_all(class_='name')
  
  #保存名字链接
  for each in targets_url_2:
    list_url.append(re.sub('[\t\n]',"",re.sub(r'<[^>]+>',"",str(each))))
  
  f = open('test.txt', 'w') #首先先创建一个文件对象,打开方式为w
  for each in list_url:
    f.writelines(each) #用readlines()方法写入文件
    f.writelines('\n')
     
  print(list_url)
   
  print('下载完成!')
     </span>
 

以上这篇 Python 获取 div 标签中的文字实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。