Python使用正则表达式提取div标签内文本详解
本文介绍如何在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 标签中的文字实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













