使用BeautifulSoup移除HTML的script标签时如何保留不完整</tr>标签
解决方案
你遇到的问题本质是BeautifulSoup解析HTML时会自动修正不规范的DOM结构,无对应开标签的</tr>闭合标签会被自动清理,重构后输出的内容自然会打乱原有表格格式。要保留原HTML的非规范结构,不要使用基于DOM解析重构的处理方案,改用正则文本匹配的方式删除script标签即可。
可直接运行的实现代码
import os import re from pathlib import Path root_dir = os.path.join(Path().absolute(), 'newfolder\\') # 匹配script标签的正则:支持带属性、内容换行、大小写兼容 script_pattern = re.compile(r'<script[^>]*>.*?</script>', flags=re.DOTALL | re.IGNORECASE) for path in Path(root_dir).iterdir(): if path.is_file(): # 读取原文件内容,不做结构解析 with open(path, encoding="utf-8") as f: raw_html = f.read() # 替换所有script标签为空 cleaned_html = script_pattern.sub('', raw_html) # 写回文件,完全保留原其他内容格式 with open(path, "w", encoding="utf-8") as f: f.write(cleaned_html)
注意事项
- 该方案不会修改除script标签外的任何内容,完全适配存在非规范标签的HTML文件场景
- 你原有代码存在两处语法错误:
path.is.file()需改为path.is_file(),open(path,encoding="utf-8".read()需改为open(path,encoding="utf-8").read(),否则无法正常运行 - 该方案仅适用于没有非法嵌套script标签的常规HTML场景,常规业务场景下完全够用
内容的提问来源于stack exchange,提问作者Guerilla
相关产品推荐
相关产品推荐

