在Python中清理HTML

Joe*_*oel 15 html python django

我正在汇总来自少数外部资源的内容,并发现其中一些内容包含HTML/DOM中的错误.一个很好的例子是HTML缺少结束标记或格式错误的标记属性.有没有办法清除本机中的错误或我可以安装的任何第三方模块?

Jud*_*ill 17

我会建议Beautifulsoup.它有一个很棒的解析器,可以非常优雅地处理格式错误的标签.一旦读完整个树,就可以输出结果.

from bs4 import BeautifulSoup
tree = BeautifulSoup(bad_html)
good_html = tree.prettify()
Run Code Online (Sandbox Code Playgroud)

我已经多次使用它并且它可以创造奇迹.如果您只是从bad-html中提取数据,那么BeautifulSoup在提取数据方面真的很棒.


ccp*_*zza 6

以下是使用lxml.html.clean.Cleaner模块清理HTML的示例:

import sys

from lxml.html.clean import Cleaner


def sanitize(dirty_html):
    cleaner = Cleaner(page_structure=True,
                  meta=True,
                  embedded=True,
                  links=True,
                  style=True,
                  processing_instructions=True,
                  inline_style=True,
                  scripts=True,
                  javascript=True,
                  comments=True,
                  frames=True,
                  forms=True,
                  annoying_tags=True,
                  remove_unknown_tags=True,
                  safe_attrs_only=True,
                  safe_attrs=frozenset(['src','color', 'href', 'title', 'class', 'name', 'id']),
                  remove_tags=('span', 'font', 'div')
                  )

    return cleaner.clean_html(dirty_html)


if __name__ == '__main__':

    with open(sys.argv[1]) as fin:

        print(sanitize(fin.read()))
Run Code Online (Sandbox Code Playgroud)

查看文档以获取可以传递给Cleaner的完整选项列表.