• 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)
    



  • 相关阅读:
    Tomcat和nginx负载均衡算法
    (转)CSS浮动(float,clear)通俗讲解
    MvcSiteMapProvider配置使用
    idea出现jdk版本过低导致无法通过编译
    java生成自己的doc文档
    RabbitMQ的应用场景
    java 变量和常量
    IDEA创建新空项目
    java中整型、浮点型、char型扩展
    java中数据类型占多少字节
  • 原文地址:https://www.cnblogs.com/zhouzme/p/5758419.html
Copyright © 2020-2023  润新知