利用正則式處理,不知道會不會有性能問題,沒有經過太多測試。
目前我有很多還是使用BeautifulSoup進行這種處理。
HTML實體處理的只是用於處理一些常用的實體。
1 # -*- coding: utf-8-*- 2 import re 3 ##過濾HTML中的標簽 4 #將HTML中標簽等信息去掉 5 #@param htmlstr HTML字符串. 6 def filter_tags(htmlstr): 7 #先過濾CDATA 8 re_cdata=re.compile('//<!\[CDATA\[[^>]*//\]\]>',re.I) #匹配CDATA 9 re_script=re.compile('<\s*script[^>]*>[^<]*<\s*/\s*script\s*>',re.I)#Script 10 re_style=re.compile('<\s*style[^>]*>[^<]*<\s*/\s*style\s*>',re.I)#style 11 re_br=re.compile('<br\s*?/?>')#處理換行 12 re_h=re.compile('</?\w+[^>]*>')#HTML標簽 13 re_comment=re.compile('<!--[^>]*-->')#HTML注釋 14 s=re_cdata.sub('',htmlstr)#去掉CDATA 15 s=re_script.sub('',s) #去掉SCRIPT 16 s=re_style.sub('',s)#去掉style 17 s=re_br.sub('\n',s)#將br轉換為換行 18 s=re_h.sub('',s) #去掉HTML 標簽 19 s=re_comment.sub('',s)#去掉HTML注釋 20 #去掉多余的空行 21 blank_line=re.compile('\n+') 22 s=blank_line.sub('\n',s) 23 s=replaceCharEntity(s)#替換實體 24 return s 25 26 ##替換常用HTML字符實體. 27 #使用正常的字符替換HTML中特殊的字符實體. 28 #你可以添加新的實體字符到CHAR_ENTITIES中,處理更多HTML字符實體. 29 #@param htmlstr HTML字符串. 30 def replaceCharEntity(htmlstr): 31 CHAR_ENTITIES={'nbsp':' ','160':' ', 32 'lt':'<','60':'<', 33 'gt':'>','62':'>', 34 'amp':'&','38':'&', 35 'quot':'"','34':'"',} 36 37 re_charEntity=re.compile(r'&#?(?P<name>\w+);') 38 sz=re_charEntity.search(htmlstr) 39 while sz: 40 entity=sz.group()#entity全稱,如> 41 key=sz.group('name')#去除&;后entity,如>為gt 42 try: 43 htmlstr=re_charEntity.sub(CHAR_ENTITIES[key],htmlstr,1) 44 sz=re_charEntity.search(htmlstr) 45 except KeyError: 46 #以空串代替 47 htmlstr=re_charEntity.sub('',htmlstr,1) 48 sz=re_charEntity.search(htmlstr) 49 return htmlstr 50 51 def repalce(s,re_exp,repl_string): 52 return re_exp.sub(repl_string,s) 53 54 if __name__=='__main__': 55 s=file('Google.htm').read() 56 news=filter_tags(s) 57 print news
輸出結果:
Google網頁 圖片 地圖 資訊 視頻 財經 更多 博客 生活 熱榜 網站導航 日歷 照片 文檔 協作平台 輸入法 工具欄 軟件精選 更多 個性化首頁 | 登錄
高級搜索
使用偏好
語言工具所有網頁 中文網頁 簡體中文網頁 中國的網頁
廣告計划 – Google 大全 – Google.com in English2009 – 隱私權 – ICP證合字B2-20070004號