【问题标题】:How to display HTML using LXML in Python如何在 Python 中使用 LXML 显示 HTML
【发布时间】:2020-08-24 10:35:28
【问题描述】:

所以我想要实现的目标非常简单。

我想打电话给python test.py,想去我的本地主机看看html结果。但是我不断收到错误ValueError: Invalid tag name u'<html><body><h1>Test!</h1></body></html>'

下面是我的代码。这里有什么问题?

import lxml.etree as ETO
html = ETO.Element("<html><body><h1>Test!</h1></body></html>")
self.wfile.write(ETO.tostring(html, xml_declaration=False, pretty_print=True))

【问题讨论】:

  • 您是要读取现有文件还是创建新文件?
  • @JackFleeting 我正在尝试读取现有文件!
  • lxml 不是网络服务器。这看起来类似于您的另一个问题:stackoverflow.com/q/61683853/407651

标签: python html python-3.x lxml


【解决方案1】:

由于您正在读取现有文件,Element 在这里没有用处;尝试改变这个

html = ETO.Element("<html><body><h1>Test!</h1></body></html>")

到这里

html = ETO.fromstring("<html><body><h1>Test!</h1></body></html>")

看看它是否适合你。

【讨论】:

    【解决方案2】:

    您必须依次创建每个元素,并将它们放入您希望它们具有的结构中:

    html = ETO.Element('html')
    body = ETO.SubElement(html, 'body')
    h1 = ETO.SubElement(body, 'h1')
    h1.text = 'Test!'
    

    然后 ETO.tostring(html) 将返回一个如下所示的字节串:

    >>> ETO.tostring(html)
    b'<html><body><h1>Test!</h1></body></html>'
    

    【讨论】:

    • 感谢您的回答!我以前没有,但我意识到它对于大文件来说太多了。我想在 python 中读取 html 文件而不依次创建每个元素。我该怎么做?
    • 如果您已经有一个 HTML 文件,为什么要重新创建它?我想我不明白你要解决的问题。
    • python 文件本身具有其他功能,如果我可以启动服务器并在 python 代码本身中显示我的 html 文件,这些功能会在生产时间上更快。我想知道是否有任何方法可以做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2013-01-17
    • 2013-01-01
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多