如何修复错误嵌套/未闭合的 HTML 标签?

2024-05-04

我需要通过使用正确的嵌套顺序关闭任何打开的标签来清理用户提交的 HTML。我一直在寻找一种算法或Python代码来做到这一点,但除了PHP等中的一些半生不熟的实现之外,还没有找到任何东西。

例如,类似的东西

<p>
  <ul>
    <li>Foo

becomes

<p>
  <ul>
    <li>Foo</li>
  </ul>
</p>

任何帮助,将不胜感激 :)


使用美丽汤:

from BeautifulSoup import BeautifulSoup
html = "<p><ul><li>Foo"
soup = BeautifulSoup(html)
print soup.prettify()

gets you

<p>
 <ul>
  <li>
   Foo
  </li>
 </ul>
</p>

据我所知,您无法控制将

  • 标记放在与 Foo 不同的行上。

    使用整洁:

    import tidy
    html = "<p><ul><li>Foo"
    print tidy.parseString(html, show_body_only=True)
    

    gets you

    <ul>
    <li>Foo</li>
    </ul>
    

    不幸的是,我不知道如何在示例中保留

    标记。 Tidy 将其解释为一个空段落而不是一个未关闭的段落,因此这样做

    print tidy.parseString(html, show_body_only=True, drop_empty_paras=False)
    

    出来为

    <p></p>
    <ul>
    <li>Foo</li>
    </ul>
    

    当然,最终,您的示例中的

    标记是多余的,因此您可能会丢失它。

    最后,Tidy 还可以进行缩进:

    print tidy.parseString(html, show_body_only=True, indent=True)
    

    becomes

    <ul>
      <li>Foo
      </li>
    </ul>
    

    所有这些都有其优点和缺点,但希望其中之一足够接近。

  • 本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

    如何修复错误嵌套/未闭合的 HTML 标签? 的相关文章

    • 需要在python中找到print或printf的源代码[关闭]

      很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
    • CSS 显示无不工作

      media screen and min width 900px and max width 1215px menu display none 这不起作用 div 仍然可见 但是 如果我将 div 更改为 div class menu 代替
    • 使用 kivy textinput 的 'input_type' 属性的问题

      您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
    • 独立滚动矩阵的行

      我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
    • 立体太阳图 matplotlib 极坐标图 python

      我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
    • n 或 nlog(n) 比常数时间或对数时间更好吗?

      在 Coursera 上的普林斯顿教程中 讲师解释了遇到的常见增长顺序函数 他说 线性和线性算术运行时间是 我们努力的目标 他的推理是 随着输入大小的增加 运行时间也会增加 我认为这是他犯了错误的地方 因为我之前听过他提到线性增长顺序对于高
    • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

      我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
    • Pandas Merge (pd.merge) 如何设置索引和连接

      我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
    • Python,将函数的输出重定向到文件中

      我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
    • 如何使用 Mysql Python 连接器检索二进制数据?

      如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
    • 如何使跨度标签不可删除?

      我正在尝试使 contenteditable div 内的跨度标记不可删除 div Editable span Read Only span div 只读范围确实是只读的 但我可以通过单击删除键来删除整个范围 有没有一种属性方法可以告诉sp
    • 如何通过 TLS 1.2 运行 django runserver

      我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
    • javascript 是否有等效的 __repr__ ?

      我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
    • Jupyter Notebook 找不到 Python 模块

      不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
    • pip 列出活动 virtualenv 中的全局包

      将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
    • 将特定字形与网络字体一起使用

      使用网络字体 我想使用字体功能设置 CSS 中的选项以及跨度类HTML 中 以便使用字体集中的特定替代字形 我需要以正确的语法使用哪些值 GID Unicode 才能定位特定的目标glyph内glyph备择方案 这些功能使用 OpenTyp
    • 如何使用原始 SQL 查询实现搜索功能

      我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
    • 如何在画布上所有其他内容后面绘制图像? [复制]

      这个问题在这里已经有答案了 我有一块画布 我想用drawImage在画布上当前内容后面绘制图像 由于画布上已经有内容 我正在使用字面上的画布来创建包含图像的画布 因此我无法真正先绘制图像 所以我无法使用drawImage在我呈现其余内容之前
    • 更改 Tk 标签小部件中单个单词的颜色

      我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s
    • 使用随机放置的 NaN 创建示例 numpy 数组

      出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas

    随机推荐