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



  • 相关阅读:
    关键字,保留字
    20181024
    php连接mysql数据并查询
    java 字符串的json格式数据转换成Map集合
    IntelliJ IDEA的一些快捷键
    Java的反射机制简述
    java主函数知识
    单例设计模式---懒汉式的多线程安全隐患
    java的单例设计模式(对象的延时加载)考试专用
    java的单例设计模式
  • 原文地址:https://www.cnblogs.com/zhouzme/p/5758419.html
Copyright © 2020-2023  润新知