zoukankan      html  css  js  c++  java
  • Python 清理HTML标签相似PHP的strip_tags函数功能(二)

    没有发现Python 有现成的类似功能模块,所以昨天写了个简单的 strip_tags 但还有些问题,今天应用到採集上时进行了部分功能的完好,

    1. 对自闭和标签处理

    2. 以及对标签參数的过滤



    from html.parser import HTMLParser
    
    
    def strip_tags(html, allow_tags=None, allow_attrs=None):
        result = []
        start = []
        data = []
        # 特殊的自闭和标签, 按 HTML5 的规则, 如 <br> <img> <wbr> 不再使用 /> 结尾
        special_end_tags = [
            'area', 'base', 'br', 'col', 'embed', 'hr',
            'img', 'input', 'keygen', 'link', 'meta', 'param',
            'source', 'track', 'wbr'
        ]
    
        def starttag(tag, attrs):
            if tag not in allow_tags:
                return
            start.append(tag)
            my_attrs = []
            if attrs:
                for attr in attrs:
                    if allow_attrs and attr[0] not in allow_attrs:
                        continue
                    my_attrs.append(attr[0] + '="' + attr[1] + '"')
                if my_attrs:
                    my_attrs = ' ' + (' '.join(my_attrs))
                else:
                    my_attrs = ''
            else:
                my_attrs = ''
    
            result.append('<' + tag + my_attrs + '>')
    
        def endtag(tag):
            if start and tag == start[len(start) - 1]:
                # 特殊自闭和标签依照HTML5规则不加反斜杠直接尖括号结尾
                if tag not in special_end_tags:
                    result.append('</' + tag + '>')
    
        parser = HTMLParser()
        parser.handle_data = result.append
        if allow_tags:
            parser.handle_starttag = starttag
            parser.handle_endtag = endtag
        parser.feed(html)
        parser.close()
    
        for i in range(0, len(result)):
            tmp = result[i].rstrip('
    ')
            tmp = tmp.lstrip('
    ')
            if tmp:
                data.append(tmp)
    
        return ''.join(data)
    



  • 相关阅读:
    每日算法-02旋转矩阵
    广搜
    每日算法-01
    洛谷P1162填涂颜色
    队列
    知识网站复习
    mysql索引底层的数据结构和算法
    Java中的类反射
    常见的加密方式
    计算机数制和运算的一点总结.
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4549155.html
Copyright © 2011-2022 走看看