Python通過正則表達式去除(過濾)HTML標簽,提取文字


# -*- coding: utf-8-*-
import re
##過濾HTML中的標簽
#將HTML中標簽等信息去掉
#@param htmlstr HTML字符串.
def filter_tags(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轉換為換行
    s=re_h.sub('',s) #去掉HTML 標簽
    s=re_comment.sub('',s)#去掉HTML注釋
    #去掉多余的空行
    blank_line=re.compile('n+')
    s=blank_line.sub('n',s)
    s=replaceCharEntity(s)#替換實體
    return s
##替換常用HTML字符實體.
#使用正常的字符替換HTML中特殊的字符實體.
#你可以添加新的實體字符到CHAR_ENTITIES中,處理更多HTML字符實體.
#@param htmlstr HTML字符串.
def replaceCharEntity(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')#去除&;后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 repalce(s,re_exp,repl_string):
    return re_exp.sub(repl_string,s)
if __name__=='__main__':
    str=''  # 需要提取的html字符串
    str=filter_tags(str)
    print(str)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM