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月前
|
移动开发 HTML5
HTML5标签的类型
HTML5标签的类型。
58 5
|
21天前
|
移动开发 搜索推荐 UED
HTML5的新语义化标签
HTML5引入的这些新语义化标签,通过明确标识内容的结构和意义,使得网页结构更加清晰,易于理解和维护。使用这些标签不仅提升了网页的可读性和可访问性,还增强了搜索引擎和辅助技术对网页内容的解析能力。在实际开发中,合理使用这些语义化标签,能够显著提升网页的质量和用户体验。
85 49
|
12天前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href=&#39;example.com&#39;]` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
|
15天前
|
存储 移动开发 前端开发
高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容
本文深入探讨了高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容,旨在提升开发效率、网站性能和用户体验。
29 5
|
6天前
|
机器学习/深度学习 前端开发 数据处理
利用Python将Excel快速转换成HTML
本文介绍如何使用Python将Excel文件快速转换成HTML格式,以便在网页上展示或进行进一步的数据处理。通过pandas库,你可以轻松读取Excel文件并将其转换为HTML表格,最后保存为HTML文件。文中提供了详细的代码示例和注意事项,帮助你顺利完成这一任务。
17 0
|
1月前
|
移动开发 编解码 UED
除了 `<audio>` 和 `<video>` 标签,HTML5 还支持哪些多媒体格式?
【10月更文挑战第19天】HTML5对多种多媒体格式的支持,为网页开发者提供了丰富的选择,能够更好地满足不同类型多媒体内容在网页中的展示和交互需求,提升了网页的用户体验和多媒体应用的多样性。
|
1月前
|
存储 移动开发 前端开发
|
2月前
|
前端开发
【HTML】img标签和超链接标签
【HTML】img标签和超链接标签
45 2
|
2月前
|
移动开发 前端开发 JavaScript
【HTML】HTML页面和常见标签
【HTML】HTML页面和常见标签
39 1
|
3月前
|
Web App开发 PHP iOS开发
易优CMS PHP原生标签调用
这段代码实现了一个自动化工具,用于从指定的漫画网站下载章节内容,并将其转换为PDF格式。它首先通过用户输入的链接获取网页信息,然后根据用户的选择下载整个章节或特定章节的图片,并保存到本地文件夹中。下载完成后,工具会将这些图片合并成一个PDF文件,并添加书签以便于浏览。此外,代码还包含了异常处理机制,确保在网络不稳定时能够重试下载。
34 4