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('\n')
        tmp = tmp.lstrip('\n')
        if tmp:
            data.append(tmp)

    return ''.join(data)



目录
相关文章
|
2月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
206 1
|
2月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
303 1
|
2月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
184 0
|
3月前
|
设计模式 缓存 监控
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
280 101
|
3月前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
228 99
|
3月前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
202 98
|
3月前
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
3月前
|
PHP 开发者
PHP计算过去一定时间段内日期范围函数
这个函数为开发者提供了一个快速而简单的方法来获取与当前日期相关的过去时间范围,代码简洁易懂,可复用性高。
142 15
|
3月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。

推荐镜像

更多