1 # coding:utf-8 2 3 class TidyText(object): 4 def __init__(self,string='',begin='',last=''): 5 super(TidyText,self).__init__() 6 self.result=string 7 self.begin=begin 8 self.last=last 9 self.tags={ 10 '<a': '</a>', 11 '<table': '</table>', 12 '<tr': '</tr>', 13 '<td': '</td>', 14 '<p': '</p>', 15 '<font': '</font>', 16 '<div': '</div>', 17 '<span': '</span>', 18 '<tbody': '</tbody>', 19 '<img': '</img>', 20 '<script': '</script>', 21 '<strong': '</strong>', 22 '<br': '</br>', 23 '<h': '</h>', 24 '<form': '</form>', 25 '<frame': '</frame>', 26 '<li': '</li>', 27 '<ul': '</ul>', 28 '<dd': '</dd>', 29 '<dt': '</dt>', 30 '<iframe': '</iframe>', 31 '<sub': '</sub>', 32 '<A': '</A>', 33 '<TABLE': '</TABLE>', 34 '<TR': '</TR>', 35 '<TD': '</TD>', 36 '<P': '</P>', 37 '<FONT': '</FONT>', 38 '<DIV': '</DIV>', 39 '<SPAN': '</SPAN>', 40 '<TBODY': '</TBODY>', 41 '<IMG': '</IMG>', 42 '<SCRIPT': '</SCRIPT>', 43 '<STRONG': '</STRONG>', 44 '<BR': '</BR>', 45 '<H': '</H>', 46 '<FORM': '</FORM>', 47 '<FRAME': '</FRAME>', 48 '<LI': '</LI>', 49 '<UL': '</UL>', 50 '<DD': '</DD>', 51 '<DT': '</DT>', 52 '<IFRAME': '</IFRAME>', 53 '<SUB': '</SUB>', 54 '<a': '</a>', 55 '<table': '</table>', 56 '<tr': '</tr>', 57 '<td': '</td>', 58 '<p': '</p>', 59 '<font': '</font>', 60 '<div': '</div>', 61 '<span': '</span>', 62 '<tbody': '</tbody>', 63 '<img': '</img>', 64 '<script': '</script>', 65 '<strong': '</strong>', 66 '<br': '</br>', 67 '<h': '</h>', 68 '<form': '</form>', 69 '<frame': '</frame>', 70 '<li': '</li>', 71 '<ul': '</ul>', 72 '<dd': '</dd>', 73 '<dt': '</dt>', 74 '<iframe': '</iframe>', 75 '<sub': '</sub>', 76 '<A': '</A>', 77 '<TABLE': '</TABLE>', 78 '<TR': '</TR>', 79 '<TD': '</TD>', 80 '<P': '</P>', 81 '<FONT': '</FONT>', 82 '<DIV': '</DIV>', 83 '<SPAN': '</SPAN>', 84 '<TBODY': '</TBODY>', 85 '<IMG': '</IMG>', 86 '<SCRIPT': '</SCRIPT>', 87 '<STRONG': '</STRONG>', 88 '<BR': '</BR>', 89 '<H': '</H>', 90 '<FORM': '</FORM>', 91 '<FRAME': '</FRAME>', 92 '<LI': '</LI>', 93 '<UL': '</UL>', 94 '<DD': '</DD>', 95 '<DT': '</DT>', 96 '<IFRAME': '</IFRAME>', 97 '<SUB': '</SUB>', 98 } 99 self.fulltag=True 100 self.reservetags={} # '<a':0 仅仅删除 <a...>, '<a':'</a>' 删除全部 101 102 self.junk=[' '' ',' ',' '] 103 self.reservejunk=[] 104 self.dels=[] 105 106 def gets(self): 107 self.check() #检查输入string是否是字符串格式 108 self.tidytags() 109 return self.result 110 111 def check(self): 112 if type(self.result)!=type(''): 113 return 'type error, str is needed' 114 else: 115 self.result=self.get(self.result,self.begin,self.last,cycle=0,include=0)[0] 116 117 def tidytags(self): 118 if len(self.reservetags)>0: 119 #从总taqg list里除去这部分要保留的. 120 for tag in list(self.reservetags.keys()): 121 try: 122 self.tags.pop(tag) 123 except Exception as e: 124 print(u'保留字符串不存在') 125 pass 126 #保留字符串处理: 127 for ktag,vtag in list(self.reservetags.items()): 128 if vtag==0: 129 self.result=self.removehtml(self.result,ktag,'>') 130 elif vtag==-1: 131 pass 132 else: 133 self.result=self.removehtml(self.result,ktag,vtag) 134 #全局字符串处理 135 for ktag,vtag in list(self.tags.items()): 136 if self.fulltag==True: 137 self.result=self.removehtml(self.result,ktag,vtag) 138 else: 139 self.result = self.removehtml(self.result, ktag, '>') 140 #垃圾字符串处理 141 if len(self.reservejunk)>0: 142 for junk in self.reservejunk: 143 try: 144 self.junk.remove(junk) 145 except Exception as e: 146 print('垃圾字符串不存在') 147 pass 148 for removejunk in self.junk: 149 self.result.replace(removejunk,'') 150 #字定义额外字符串删除: 151 if len(self.dels)>0: 152 for i in self.dels: 153 self.result.replace(i,'') 154 155 def removehtml(self,string,begin,last): 156 s=string 157 rem=self.get(s,begin,last,cycle=1,include=1) 158 if len(rem)>1: 159 for i in rem: 160 s=s.replace(i,'') 161 return s 162 163 def get(self,string, begin, last, cycle=0, include=0): 164 if type(string) == type(''): 165 if cycle == 0: 166 startpoint = string.find(begin) 167 endpoint = startpoint + len(begin) + string[startpoint + len(begin):].find(last) 168 if startpoint < 0 or endpoint < 0: # 找不到开头或者结尾,直接返回 169 print(u'首尾字符串找不到') 170 return [string] 171 if include == 0: 172 return [string[startpoint + len(begin):endpoint]] 173 else: 174 return [begin + string[startpoint + len(begin):endpoint] + last] 175 elif cycle == 1: 176 records = [] 177 x = string 178 while x.find(begin) >= 0: 179 startpoint = x.find(begin) 180 endpoint = startpoint + len(begin) + x[startpoint + len(begin):].find(last) 181 if startpoint < 0 or endpoint < 0: # 找不到开头或者结尾,直接返回 182 print(u'首尾字符串找不到') 183 return [string] 184 if include == 0: 185 records.append(x[startpoint + len(begin):endpoint]) 186 else: 187 records.append(begin + x[startpoint + len(begin):endpoint] + last) 188 x = x[endpoint + len(last):] 189 return records 190 else: 191 return ['error:not string type']