Python 实现类似PHP的strip_tags函数功能,并且可以自定义设置保留标签

最近在研究 Python ,发现用的还是很不习惯,很多PHP里面很简单的功能在Python 里面都得找半天,而且很多功能都得自己实现。

今天做个采集,需要过滤内容中的标签,搞了一下午,貌似终于搞出来了,测试了下达到了预想的效果,废话不多说贴上代码吧

from html.parser import HTMLParser

def strip_tags(html, save=None):
    result = []
    start = []
    data = []

    def starttag(tag, attrs):
        if tag not in save:
            return
        start.append(tag)
        if attrs:
            j = 0
            for attr in attrs:
                attrs[j] = attr[0] + '="' + attr[1] + '"'
                j += 1
            attrs = ' ' + (' '.join(attrs))
        else:
            attrs = ''
        result.append('<' + tag + attrs + '>')

    def endtag(tag):
        if start and tag == start[len(start) - 1]:
            result.append('</' + tag + '>')

    parser = HTMLParser()
    parser.handle_data = result.append
    if save:
        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)

使用方法:

    result = strip_tags("""发生的杀毒<a target="_blank" title="足球比分直播" href="http://live.500.com/" >足球比分直播</a><a target="_blank" title="竞彩足球" href="http://zx.500.com/jczq/" >竞彩足球</a><a target="_blank" title="篮球竞彩" href="http://zx.500.com/jclq/" >篮球竞彩</a></div>
				<img src="dd" alt=">">						<p>  打蛇打七寸,北单7串1。由于<a target="_blank" title="北京单场" href="http://zx.500.com/zqdc/">北京单场</a>SP值计算规则与竞彩不同,4串1及以下投注购买竞彩更划算,而7串1以上的投注很可能交税,反而不划算。根据计算,北京单场4串1到7串1之间的投注最划算。</p>
""", ['p', 'img'])
    print(result)

输出结果:

发生的杀毒足球比分直播竞彩足球篮球竞彩				<img src="dd" alt=">">						<p>  打蛇打七寸,北单7串1。由于北京单场SP值计算规则与竞彩不同,4串1及以下投注购买竞彩更划算,而7串1以上的投注很可能交税,反而不划算。根据计算,北京单场4串1到7串1之间的投注最划算。</p>

仅保留 <a> 和 <p> 标签

时间: 2024-09-17 08:51:24

Python 实现类似PHP的strip_tags函数功能,并且可以自定义设置保留标签的相关文章

python中实现php的var_dump函数功能_python

最近在做python的web开发(原谅我的多变,好东西总想都学着...node.js也是),不过过程中总遇到些问题,不管是web.py还是django,开发起来确实没用php方便,毕竟存在的时间比较短,很多不完善的地方. 比如我在调试php中最常用的函数,var_dump,在python里找不到合适的替代函数.php中var_dump是一个特别有用的函数,它可以输出任何变量的值,不管你是一个对象还是一个数组,或者只是一个数.它总能用友好的方式输出,我调试的时候经常会需要看某位置的变量信息,调用它

在Python中使用mechanize模块模拟浏览器功能

  这篇文章主要介绍了在Python中使用mechanize模块模拟浏览器功能,包括使用cookie和设置代理等功能的实现,需要的朋友可以参考下 知道如何快速在命令行或者python脚本中实例化一个浏览器通常是非常有用的. 每次我需要做任何关于web的自动任务时,我都使用这段python代码去模拟一个浏览器. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import mechanize import cookielib # Br

Python回顾与整理9:函数和函数式编程

0.说明         无论在什么编程语言中,函数都不可或缺,充分利用函数的特性,可以大大减少我们程序中的代码量. 1.什么是函数         所谓函数,英文名为function,其实就是表示为实现一定功能的一段代码,显然,如果需要多次实现某一功能时,使用函数就是把重复代码放入其中,既节省空间,又有助于保持一致性(主要是修改代码时). (1)函数vs过程         两者都是可以被调用的实体,过程是简单.没有返回值.特殊的函数.在Python中,过程就是函数,因为解释器会隐匿地返回默认

Python的Flask框架中实现分页功能的教程

  这篇文章主要介绍了Python的Flask框架中实现分页功能的教程,文中的示例基于一个博客来实现,需要的朋友可以参考下 Blog Posts的提交 让我们从简单的开始.首页上必须有一张用户提交新的post的表单. 首先我们定义一个单域表单对象(fileapp/forms.py): ? 1 2 class PostForm(Form): post = TextField('post', validators = [Required()]) 下面,我们把这个表单添加到template中(file

c++-OTL库的otl_stream有类似fstream的seekg函数一样的函数吗?

问题描述 OTL库的otl_stream有类似fstream的seekg函数一样的函数吗? otl_stream有类似fstream的seekg函数一样的函数吗?如果没有的话如何实现类似功能?假如一个行中有5个元素我只需要读第2,3,5个元素,如何做?难道必须将5个元素读到一个数组中再读取吗?但是我不知道第1,4个元素的数据类型,所以都第1,4个元素时不知道用什么类型的变量作为流操作符>>右边的操作变量,我只知道第2,3,5个元素的数据类型,这该如何处理呢?如果otl_stream实现了类似f

javascript天生就具备类似c#中的&quot;委托&quot;功能

今天读了Professional Javascript for Web Developers,才知道javascript天生就具备类似c#中的"委托"功能 <script type="text/javascript">//定义一个加法函数function fnAdd(){    var iResult = 0;    for(var i=0;i<arguments.length;i++){        iResult += arguments[i

Python中常用的日期时间函数实例

 代码如下 复制代码 处理日志数据时,经常要对日期进行进行计算,比如日期加上天数.日期相差天数.日期对应的周等计算,本文收集了几个常用的python日期功能函数,一直更新中. 直接贴代码(文件名DateUtil.py),函数功能可以直接查看注释: # -*- encoding:utf8 -*- ''' @author: crazyant @version: 2013-10-12 ''' import datetime, time #定义的日期的格式,可以自己改一下,比如改成"$Y年$m月$d日&

CSS3实例教程:详解calc()函数功能

文章描述:就算你通过繁琐的方法实现了,但有于浏览器的兼容性而导致最终效果不一致.虽然前面介绍的CSS3属性中的box-sizing在一定程度上解决这样的问题,其实今天的calc()函数功能实现上面的效果来得更简单. calc()对大家来说,或许很陌生,不太会相信calc()是css中的部分.因为看其外表像个函数,既然是函数为何又出现在CSS中呢?这一点也让我百思不得其解,今天有一同事告诉我,说CSS3中有一个属性能实现自适应的布局,首先让我想到的是box-sizing,但跟我说还可以计算,这让我

SharePoint 2010实现类似人人网站内信功能

简介:用SharePoint代码加实施的方式,完成类似人人网站内信功能,当然,实现的比较简单,样式也比较难看,只为给大家一个实施的简单思路,如有谬误,还请见谅.当然,还有就是截图比较长,当然为了让大家清晰了解每一步,并不是博主啰嗦,事先声明. 一.展示效果一,李四发送站内信给张三: 1.李四发站内信,给张三,如下图所示: 2.发送完毕后,查看李四的收件箱,为空,如下图: 3.发送完毕后,查看李四的发件箱,有李四给张三发送的站内信,如下图: 4.切换账号,张三登陆,查看右上角登录信息,张三:右上角