Python下生成HTML文档

一、HTML文件格式

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>My test page</title>
  </head>
  <body>
    <p>This is my page</p>
  </body>
</html>

参考链接

二、Python下生成HTML文档

.html 文档外在表现为许多行包含各个标签的文本,实际上可将其抽象为一棵标签树。

使用 xml.etree.ElementTree 来管理 .html 的标签树,并将该树转换为 .html 文档。

2.1 基本树结构

import xml.etree.ElementTree as et

class HtmlTree(object):
    doctype_str = "<!DOCTYPE html>"
    
    def __init__(self):
        self.html_ele = et.Element("html")
        self.head_ele = et.SubElement(self.html_ele, "head")
        self.body_ele = et.SubElement(self.html_ele, "body")
        
        self.charset_ele = et.SubElement(self.head_ele, "meta", attrib={"charset": "utf-8"})
        self.title_ele = et.SubElement(self.head_ele, "title")

2.2 将树转为字符串

class HtmlTree(object):
    # ...
    def __str__(self):
        html_str = et.tostring(self.html_ele, encoding="unicode")
        return self.doctype_str + '\n' + html_str

2.3 设置 title

class HtmlTree(object):
    # ...
    def set_title(self, title_str):
        self.title_ele.text = title_str

2.4 设置 body

class HtmlTree(object):
    # ...
    def set_body(self, body_str):
        body_str = "<body>" + body_str + "</body>"
        body_subtree = et.fromstring(body_str)

        # 复制body元素的内容,参考 Element.copy() 函数源码
        self.body_ele.text = body_subtree.text
        self.body_ele.tail = body_subtree.tail
        self.body_ele[:] = body_subtree    # 复制子节点
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,710评论 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,486评论 1 45
  • ···lxml用法源自 lxml python 官方文档,更多内容请直接参阅官方文档,本文对其进行翻译与整理。lx...
    小丰丰_72a2阅读 4,640评论 0 1
  • 简介浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 作原理,我们将看到,从你在地址栏输入google.c...
    听风阁阅读 8,570评论 0 7
  • 良好的恋爱和婚姻关系 绝不是以平淡为最终归宿 不知道最近你和他之间的状态是不是这样的…. 两个人下班以后各忙各的,...
    花镇阅读 1,459评论 0 0

友情链接更多精彩内容