新聞中心
python中sgmllib.SGMLParser是什么用的
如果要用sgmllib解析html,則要繼承sgmllib.SGMLParser類,此類里的函數(shù)都是空的,用戶需要重載它。這個(gè)類提供的功能是在特定情況下調(diào)用相應(yīng)的函數(shù)。
成都創(chuàng)新互聯(lián)公司2013年成立,先為獨(dú)山等服務(wù)建站,獨(dú)山等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為獨(dú)山企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
比如當(dāng)發(fā)現(xiàn)html標(biāo)簽時(shí),如果并沒有定義 start_html(self,attr)函數(shù),則會(huì)調(diào)用unknown_starttag函數(shù),具體怎么處理則根據(jù)用戶。
sgml的標(biāo)簽是可以自定義的,比如自己定義了一個(gè)start_lala函數(shù),則就會(huì)處理lala標(biāo)簽。
有個(gè)地方要說明下,如果定義了start_tagname函數(shù),有定義了handle_starttag函數(shù),則函數(shù)只會(huì)運(yùn)行handle_starttag函數(shù),start_tagname為空函數(shù)都沒有問題,如果沒有定義handle_starttag函數(shù),則遇到tagname標(biāo)簽時(shí),會(huì)運(yùn)行start_tagname函數(shù)。如果沒有定義tagname的start函數(shù),則此標(biāo)簽為未知標(biāo)簽,調(diào)用unknown_starttag函數(shù)
給你個(gè)例子你就知道了:
#------------------?HTMLParser_stack.py?------------------#
#--?coding:?GBK?--
import?sgmllib,sys,os,string
html?=?"""lalaheadtitleAdvice/title/headbody
pThe?a?href=""?mce_href=""IETF?admonishes:
iBe?strict?in?what?you?bsend/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
python tkinter 的Text控件為什么tag_add和tag_config用不了?
報(bào)錯(cuò)提示給你說的很明顯了......
可能是“text1”在你代碼中間被替換了,
變成了None,
檢查代碼吧。。。
26、BeautifulSoup之Tag
上集回顧:
上集快速領(lǐng)略了一下 BeautifulSoup 的大概功能,并學(xué)習(xí)了如何安裝和構(gòu)造一個(gè) BeautifulSoup 對(duì)象。
本集學(xué)習(xí) BeautifulSoup 的 Tag 及其屬性。
由于HTML和XML是由大量tag組合和嵌套而成,所以檢索目標(biāo)信息就是檢索目標(biāo)tag的過程。
一、Tag對(duì)象
Tag 對(duì)象與XML或HTML原生文檔中的tag相同:
Tag有很多方法和屬性,其中最重要的屬性是: name和attributes。
二、name屬性
每個(gè)tag都有自己的名字,通過 .name 來獲取:
如果改變了tag的name,那將影響所有通過當(dāng)前Beautiful Soup對(duì)象生成的HTML文檔:
三、attributes屬性
一個(gè)tag可能有很多個(gè)屬性. tag b class="boldest" 有一個(gè) “class” 的屬性,值為 “boldest” . tag的屬性的操作方法與字典相同:
也可以直接”點(diǎn)”取屬性, 比如: .attrs :
tag的屬性可以被添加,刪除或修改. 再說一次, tag的屬性操作方法與字典一樣
四、多值屬性
HTML 定義了一系列可以包含多個(gè)值的屬性。最常見的多值的屬性是 class (一個(gè)tag可以有多個(gè)CSS的class). 還有一些屬性 rel , rev , accept-charset , headers , accesskey 。在Beautiful Soup中多值屬性的返回類型是list:
如果某個(gè)屬性看起來好像有多個(gè)值,但在任何版本的HTML定義中都沒有被定義為多值屬性,那么Beautiful Soup會(huì)將這個(gè)屬性作為字符串返回
將tag轉(zhuǎn)換成字符串時(shí),多值屬性會(huì)合并為一個(gè)值
如果轉(zhuǎn)換的文檔是XML格式,那么tag中不包含多值屬性
五、字符串
字符串常被包含在tag內(nèi)。BeautifulSoup用 NavigableString 類來包裝tag中的字符串:
一個(gè) NavigableString 字符串與Python中的Unicode字符串相同,通過 unicode() 方法可以直接將 NavigableString 對(duì)象轉(zhuǎn)換成Unicode字符串:
本集總結(jié):
下集見
Python tag解析
這個(gè)不難啊,用id來定位元素,然后就可以了。id通常是唯一的。
from?bs4?import?BeautifulSoup
html_doc?=?'a?href=""?class="sister"?id="link1"Elsie/a,'
soup?=?BeautifulSoup(html_doc,?'html.parser')
print?soup.find(id="link1").string???#?=?'Elsie'
本文題目:python中tag函數(shù) python attrs函數(shù)
分享鏈接:http://www.dlmjj.cn/article/doigjcc.html