python 去除html標籤的幾種方法

#! /usr/bin/python  # -*- coding:utf-8 -*-  '''  Created on 2013-12-18    @author: Java  '''  import re  from HTMLParser import HTMLParser  class FilterTag():      def __init__(self):          pass      def filterHtmlTag(self,htmlStr):          '''          過濾html中的標籤          :param htmlStr:html字元串 或是網頁源碼          '''          self.htmlStr = htmlStr          #先過濾CDATA          re_cdata=re.compile('//<![CDATA[[^>]*//]]>',re.I) #匹配CDATA          re_script=re.compile('<s*script[^>]*>[^<]*<s*/s*scripts*>',re.I)#Script          re_style=re.compile('<s*style[^>]*>[^<]*<s*/s*styles*>',re.I)#style          re_br=re.compile('<brs*?/?>')#處理換行          re_h=re.compile('</?w+[^>]*>')#HTML標籤          re_comment=re.compile('<!--[^>]*-->')#HTML注釋          s=re_cdata.sub('',htmlStr)#去掉CDATA          s=re_script.sub('',s) #去掉SCRIPT          s=re_style.sub('',s)#去掉style          s=re_br.sub('n',s)#將br轉換為換行          blank_line=re.compile('n+')#去掉多餘的空行          s = blank_line.sub('n',s)          s=re_h.sub('',s) #去掉HTML 標籤          s=re_comment.sub('',s)#去掉HTML注釋          #去掉多餘的空行          blank_line=re.compile('n+')          s=blank_line.sub('n',s)          filterTag = FilterTag()          s=filterTag.replaceCharEntity(s)#替換實體          print  s        def replaceCharEntity(self,htmlStr):          '''          替換html中常用的字元實體          使用正常的字元替換html中特殊的字元實體          可以添加新的字元實體到CHAR_ENTITIES 中      CHAR_ENTITIES是一個字典前面是特殊字元實體  後面是其對應的正常字元          :param htmlStr:          '''          self.htmlStr = htmlStr          CHAR_ENTITIES={'nbsp':' ','160':' ',                  'lt':'<','60':'<',                  'gt':'>','62':'>',                  'amp':'&','38':'&',                  'quot':'"','34':'"',}          re_charEntity=re.compile(r'&#?(?P<name>w+);')          sz=re_charEntity.search(htmlStr)          while sz:              entity=sz.group()#entity全稱,如>              key=sz.group('name')#去除&;後的字元如(" "--->key = "nbsp")    去除&;後entity,如>為gt              try:                  htmlStr= re_charEntity.sub(CHAR_ENTITIES[key],htmlStr,1)                  sz=re_charEntity.search(htmlStr)              except KeyError:                  #以空串代替                  htmlStr=re_charEntity.sub('',htmlStr,1)                  sz=re_charEntity.search(htmlStr)          return htmlStr        def replace(self,s,re_exp,repl_string):          return re_exp.sub(repl_string)          def strip_tags(self,htmlStr):          '''          使用HTMLParser進行html標籤過濾          :param htmlStr:          '''            self.htmlStr = htmlStr          htmlStr = htmlStr.strip()          htmlStr = htmlStr.strip("n")          result = []          parser = HTMLParser()          parser.handle_data = result.append          parser.feed(htmlStr)          parser.close()          return  ''.join(result)        def stripTagSimple(self,htmlStr):          '''          最簡單的過濾html <>標籤的方法    注意必須是<任意字元>  而不能單純是<>          :param htmlStr:          '''          self.htmlStr = htmlStr  #         dr =re.compile(r'<[^>]+>',re.S)          dr = re.compile(r'</?w+[^>]*>',re.S)          htmlStr =re.sub(dr,'',htmlStr)          return  htmlStr    if __name__=='__main__':  #     s = file('Google.html').read()      filters = FilterTag()      print filters.stripTagSimple("<1>你好<html>")