亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問在python中sgmllib.SGMLParser有什么作用?

請問在python中sgmllib.SGMLParser有什么作用?

回首憶惘然 2022-03-10 11:07:46
麻煩講具體點,新手,謝謝
查看完整描述

2 回答

?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

如果要用sgmllib解析html,則要繼承sgmllib.SGMLParser類,此類里的函數都是空的,用戶需要重載它。這個類提供的功能是在特定情況下調用相應的函數。

比如當發現<html>標簽時,如果并沒有定義 start_html(self,attr)函數,則會調用unknown_starttag函數,具體怎么處理則根據用戶。

sgml的標簽是可以自定義的,比如自己定義了一個start_lala函數,則就會處理<lala>標簽。

有個地方要說明下,如果定義了start_tagname函數,有定義了handle_starttag函數,則函數只會運行handle_starttag函數,start_tagname為空函數都沒有問題,如果沒有定義handle_starttag函數,則遇到<tagname>標簽時,會運行start_tagname函數。如果沒有定義tagname的start函數,則此標簽為未知標簽,調用unknown_starttag函數

給你個例子你就知道了:


#------------------ HTMLParser_stack.py ------------------##-- coding: GBK --import sgmllib,sys,os,stringhtml = """<lala><head><title>Advice</title></head><body><p>The <a href="http://ietf.org" mce_href="http://ietf.org">IETF admonishes:<i>Be strict in what you <b>send</b>.</i></a></p><form><input type=submit name='我'> 我 <input type=text name=start size=4></form></body></lala>""" os.chdir('d://python')f=file('testboard.txt','r')contest=f.read()tagstack = []class ShowStructure(sgmllib.SGMLParser):    def handle_starttag(self, tag, method,attrs): tagstack.append(tag)    def handle_endtag(self, tag): tagstack.pop()    def handle_data(self, data):        if data.strip():            for tag in tagstack: sys.stdout.write('/'+tag)            sys.stdout.write(' >> %s/n' % data[:40].strip())                 def unknown_starttag(self,tag,attrs):        print 'start tag:<'+tag+'>'    def unknown_endtag(self,tag):        print 'end tag:</'+tag+'>'    def start_lala(self,attr):        print 'lala tag found'ShowStructure().feed(html)

 輸出:

start tag:<head>
start tag:<title>
/lala >> Advice
end tag:</title>
end tag:</head>
start tag:<body>
start tag:<p>
/lala >> The
start tag:<a>
/lala >> IETF admonishes:
start tag:<i>
/lala >> Be strict in what you
start tag:<b>
/lala >> send
end tag:</b>
/lala >> .
end tag:</i>
end tag:</a>
end tag:</p>
start tag:<form>
start tag:<input>
/lala >> ?
start tag:<input>
end tag:</form>
end tag:</body>
end tag:</lala>



查看完整回答
反對 回復 2022-03-15
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

這個是好東西。是用SGML做解析的。 SGML是XML的前身。 用這個解析器也可以解析標準的html。
曾經將這個解析器改造后變成一個HTML的畸形校正器。
它是一個比較單純的用正則表達式依次解析XML的一個解析器。效率不是很高。解析后的結果,你可以根據自己的需要將它放在樹里,或者是數組里都可以。

查看完整回答
反對 回復 2022-03-15
  • 2 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號