You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用BeautifulSoup将标签文本替换为字典对应值并保存HTML?

问题描述

我创建了如下字典和网页爬取代码:

mydic = {
'ProductName1': 'mp1',
'ProductName2': 'mp2',
'ProductName3': 'mp3',
'ProductName4': 'mp4'
}

url = "https://www.example.com"
result = requests.get(url)
soup = BeautifulSoup(result.text, "html.parser")

tagnames = soup.find_all("div", {"class": "one-line font-size-md"})

执行后得到目标标签列表:

[<div class="one-line font-size-md">ProductName1</div>, <div class="one-line font-size-md">ProductName2</div>, <div class="one-line font-size-md">ProductName3</div>, <div class="one-line font-size-md">ProductName4</div>]

我希望将这些div标签内的ProductName1、ProductName2等文本,替换为字典mydic中对应的mp1、mp2等值,再保存修改后的HTML文件。尝试转为字符串替换未成功,请问该如何实现?


解决方案

不要直接操作HTML字符串,BeautifulSoup本身支持直接修改标签的文本内容,更可靠且不会破坏HTML结构,具体步骤如下:

完整实现代码

mydic = {
'ProductName1': 'mp1',
'ProductName2': 'mp2',
'ProductName3': 'mp3',
'ProductName4': 'mp4'
}

import requests
from bs4 import BeautifulSoup

url = "https://www.example.com"
result = requests.get(url)
soup = BeautifulSoup(result.text, "html.parser")

# 遍历所有目标div标签
for tag in soup.find_all("div", {"class": "one-line font-size-md"}):
    # 获取标签文本并去除首尾空白(避免匹配字典键时出错)
    current_text = tag.get_text(strip=True)
    # 若文本在字典中有对应值,则替换
    if current_text in mydic:
        tag.string = mydic[current_text]

# 保存修改后的HTML文件(指定utf-8编码避免乱码)
with open("modified_page.html", "w", encoding="utf-8") as f:
    f.write(str(soup))

关键说明

  • 直接操作BeautifulSoup的标签对象,比字符串替换更安全,不会误改其他HTML内容
  • 若目标标签内包含多个子节点(非纯文本),可改用tag.clear()清空原有内容后,再用tag.append(mydic[current_text])添加新文本
  • tag.get_text(strip=True)可以过滤文本前后的空格、换行符,确保字典键匹配准确

内容的提问来源于stack exchange,提问作者Nima Asoud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:55:25