
本文介绍如何使用 python(beautifulsoup)在本地读取、扫描并替换 html 文件中的敏感词,适用于离线网页净化场景;同时说明浏览器扩展方案的必要性——因无法通过脚本直接修改远程网页 dom,必须借助客户端扩展机制。
本文介绍如何使用 python(beautifulsoup)在本地读取、扫描并替换 html 文件中的敏感词,适用于离线网页净化场景;同时说明浏览器扩展方案的必要性——因无法通过脚本直接修改远程网页 dom,必须借助客户端扩展机制。
在实际开发中,直接用代码修改正在浏览的远程网页 HTML 是不可行的——这是由浏览器同源策略和安全模型决定的。你无法通过本地 Python 脚本实时篡改已加载到 Chrome 中的第三方网站 DOM。但根据你的需求,可拆解为两个明确、可行的技术路径:
✅ 方案一:本地 HTML 文件批量净化(推荐用于存档/测试)
适用于你已下载网页(如 example.html),需离线清洗文本内容。核心思路是:解析 HTML → 定位含敏感词的文本节点 → 替换内容 → 保存新 HTML。
以下是一个健壮、可扩展的实现示例(已优化原代码逻辑,避免误删标签、支持多词替换):
from bs4 import BeautifulSoup, NavigableString
def censor_html_file(file_path, banned_words, replacement="***", case_sensitive=False):
"""
批量替换 HTML 文件中所有敏感词(仅作用于纯文本节点,不破坏结构)
:param file_path: HTML 文件路径
:param banned_words: 敏感词列表,如 ["badword", "spam"]
:param replacement: 替换文本
:param case_sensitive: 是否区分大小写
"""
with open(file_path, "r", encoding="utf-8") as f:
soup = BeautifulSoup(f.read(), "html.parser")
# 遍历所有文本节点(跳过标签名、属性值等非可见文本)
for text_node in soup.find_all(string=True):
if not isinstance(text_node, NavigableString) or not text_node.strip():
continue
original_text = text_node.string
modified_text = original_text
for word in banned_words:
flags = 0 if case_sensitive else re.IGNORECASE
pattern = re.escape(word) # 防止正则特殊字符干扰
modified_text = re.sub(pattern, replacement, modified_text, flags=flags)
if modified_text != original_text:
text_node.replace_with(modified_text)
# 写回文件(保留原始编码与格式)
with open(file_path, "w", encoding="utf-8") as f:
f.write(str(soup))
print(f"✅ 已处理 {file_path}:{len(banned_words)} 个敏感词被替换为 '{replacement}'")
# 使用示例
import re
censor_html_file(
file_path="index.html",
banned_words=["垃圾", "广告", "违规"],
replacement="[已屏蔽]"
)⚠️ 注意事项:
立即学习“前端免费学习笔记(深入)”;
htmlppt.skill下载把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
- 此方法仅修改本地文件副本,不影响原始网站;
- BeautifulSoup 默认只处理 内文本,不会误改 <script> 或 <style> 中的代码(如需处理,需额外指定 soup.find_all(['script', 'style']));</script>
- 若需保留原有换行/缩进,建议使用 soup.prettify() 输出,但可能增加文件体积。
✅ 方案二:浏览器扩展实现实时网页过滤(真正面向“当前浏览页面”)
要实现在任意网站上实时屏蔽词汇(如你用 DevTools 手动操作的效果),唯一合规方式是开发 Chrome/Firefox 扩展。其核心原理是:
- 扩展注入 Content Script 到目标页面;
- 脚本遍历 DOM 文本节点,正则匹配并替换;
- 所有操作发生在用户本地浏览器内,无需服务器介入。
简化的 content.js 示例:
// content.js —— 注入到每个网页的脚本
const bannedWords = ["垃圾", "广告", "违规"];
const replacement = "[已屏蔽]";
function censorText(node) {
if (node.nodeType === Node.TEXT_NODE) {
const text = node.textContent;
let replaced = false;
let newText = text;
bannedWords.forEach(word => {
const regex = new RegExp(word, "g");
if (regex.test(text)) {
newText = newText.replace(regex, replacement);
replaced = true;
}
});
if (replaced) node.textContent = newText;
}
}
// 遍历全部文本节点(含动态加载内容)
function walkDOM(root) {
const walker = document.createTreeWalker(
root,
NodeFilter.SHOW_TEXT,
{ acceptNode: () => NodeFilter.FILTER_ACCEPT }
);
while (walker.nextNode()) censorText(walker.currentNode);
}
// 立即执行 + 监听新内容(如 AJAX 加载)
walkDOM(document.body);
new MutationObserver(() => walkDOM(document.body))
.observe(document.body, { childList: true, subtree: true });配套 manifest.json(Chrome 扩展清单):
{
"manifest_version": 3,
"name": "网页敏感词过滤器",
"version": "1.0",
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["content.js"],
"run_at": "document_idle"
}]
}? 关键提醒:
- 浏览器扩展只能影响安装它的用户设备,无法修改服务器端 HTML;
- 涉及隐私或合规场景(如企业内网过滤),务必遵守《个人信息保护法》及平台政策;
- 复杂过滤逻辑(如上下文识别、词性判断)建议结合前端 NLP 库(如 compromise)增强准确性。
综上,本地文件处理选 Python + BeautifulSoup,实时网页干预必用浏览器扩展——二者适用场景截然不同,切勿混淆技术边界。



















