使用lxml操作HTML DOM后,将DOM对象写入文件的实现语法咨询
lxml操作DOM后写入文件的实现方法
你操作完etree.HTML()生成的DOM对象后,调用etree.tostring()方法将DOM序列化为字节流,直接写入文件即可,完整实现代码如下:
from bs4 import BeautifulSoup from lxml import etree import html5lib # 原解析和DOM操作逻辑 filename = "待修改的HTML文件路径.html" soup = BeautifulSoup(open(filename, "r", encoding="utf-8").read(), "html5lib") dom = etree.HTML(str(soup)) xpath_id = "somepath" target_node = dom.xpath(f'//*[@id="{xpath_id}"]/table/tbody/tr[5]/td[7]/a[2]')[0] target_node.text = "Hello" print(target_node.text) # 新增写入文件逻辑 output_file = "修改后输出的文件路径.html" with open(output_file, "wb") as f: f.write(etree.tostring( dom, pretty_print=True, encoding="utf-8", method="html", doctype="<!DOCTYPE html>" ))
关键参数说明
pretty_print=True:开启后输出的HTML会自动格式化缩进,提升可读性,不需要格式化可以删除该参数encoding="utf-8":必须指定该参数,否则默认用ASCII编码输出,中文会转为字符实体导致乱码method="html":指定按HTML规范序列化,避免<script>、<textarea>等标签被错误处理为自闭合标签导致页面异常doctype="<!DOCTYPE html>":手动补充HTML5文档声明,和原文件格式保持一致,若原文件是其他DOCTYPE可对应修改
内容的提问来源于stack exchange,提问作者postoronnim
相关产品推荐
相关产品推荐

