4.2
[Xpath]
簡單來說我們通過Xpath可以獲取XML中的指定元素和指定節(jié)點(diǎn)的值。在網(wǎng)絡(luò)爬蟲中我們通過會把爬蟲獲取的HTML數(shù)
據(jù)轉(zhuǎn)換成XML結(jié)構(gòu),然后通過XPath解析,獲取我們想要的結(jié)果。
Xpath使用路徑表達(dá)式在XML文檔中選取節(jié)點(diǎn)。節(jié)點(diǎn)是通過沿著路徑來選取的,通過路徑可以找到我們想要的節(jié)點(diǎn)或者節(jié)點(diǎn)范圍。
xpath(‘span’) 選取span元素的所有子節(jié)點(diǎn)
xpath(‘/div’) 從根節(jié)點(diǎn)上選取div節(jié)點(diǎn)
xpath(‘//div’) 從當(dāng)前節(jié)點(diǎn)選取含有div節(jié)點(diǎn)的標(biāo)簽
xpath(‘./div’) 選取當(dāng)前節(jié)點(diǎn)下的div標(biāo)簽
xpath(‘../’) 回到上一級節(jié)點(diǎn)
xpath(“//div[@id=’1001’]”) 獲取div標(biāo)簽中,含有ID屬性且值為1001的標(biāo)簽
- 謂語(Predicates)
/bookstore/book[1]
選取屬于 bookstore 子元素的第一個 book 元素。
/bookstore/book[last()]
選取屬于 bookstore 子元素的最后一個 book 元素。
/bookstore/book[last()-1]
選取屬于 bookstore 子元素的倒數(shù)第二個 book 元素。
/bookstore/book[position()<3]
選取最前面的兩個屬于 bookstore 元素的子元素的 book 元素。
//title[@lang]
選取所有擁有名為 lang 的屬性的 title 元素。
//title[@lang='eng']
選取所有 title 元素,且這些元素?fù)碛兄禐?eng 的 lang 屬性。
/bookstore/book[price>35.00]
選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大于 35.00。
/bookstore/book[price>35.00]/title
選取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值須大于 35.00。
XPath 通配符可用來選取未知的 XML 元素,通配指定節(jié)點(diǎn)。
匹配任何元素節(jié)點(diǎn)
xpath(/div/*)
選取div下的所有子節(jié)點(diǎn)
@*
匹配任何屬性節(jié)點(diǎn)
xpath(/div[@*])
選取所有帶屬性的div節(jié)點(diǎn)
node()
匹配任何類型的節(jié)點(diǎn)
xpath(//div[@class=’tb_cls’]).node()
擇標(biāo)簽為div且類屬性為tb_cls的所有標(biāo)簽
通過在路徑表達(dá)式中使用“|”運(yùn)算符,您可以選取若干個路徑。
xpath(//book/title |//book/price)
選取 book 元素的所有 title 和 price 元素。
xpath(//title| //price)
選取文檔中的所有 title 和 price 元素
repr() 函數(shù)將對象轉(zhuǎn)化為供解釋器讀取的形式。
多態(tài)意思是“有多種形式”。多態(tài)意味著就算不知道變量所引用的對象類是什么,還是能對它進(jìn)行操作,而它也會
根據(jù)對象(或類)類型的不同而表現(xiàn)出不同的行為。
多態(tài)的可以讓用戶對于不知道是什么類(或?qū)ο箢愋?#xff09;的對象進(jìn)行方法調(diào)用,而封裝是可以不用關(guān)心對象是如何
構(gòu)建的而直接進(jìn)行使用。
創(chuàng)建一個有對象(通過像調(diào)用函數(shù)一樣調(diào)用類)后,將變量c綁定到該對象上。可以使用setName 和 getName
方法(假設(shè)已經(jīng)有)
第一種方法__init__()方法是一種特殊的方法,被稱為類的構(gòu)造函數(shù)或初始化方法,當(dāng)創(chuàng)建了這個類的實(shí)例時就
會調(diào)用該方法
類的方法與普通的函數(shù)只有一個特別的區(qū)別——它們必須有一個額外的第一個參數(shù)名稱, 按照慣例它的名稱是
self。
類的繼承
面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用,實(shí)現(xiàn)這種重用的方法之一是通過繼承機(jī)制。
通過繼承創(chuàng)建的新類稱為子類或派生類,被繼承的類稱為基類、父類或超類。
繼承語法
class 派生類名(基類名) ...
在python中繼承中的一些特點(diǎn):
1、如果在子類中需要父類的構(gòu)造方法就需要顯示的調(diào)用父類的構(gòu)造方法,或者不重寫父類的構(gòu)造方法。詳細(xì)說明
可查看:python 子類繼承父類構(gòu)造函數(shù)說明。
2、在調(diào)用基類的方法時,需要加上基類的類名前綴,且需要帶上 self
參數(shù)變量。區(qū)別在于類中調(diào)用普通函數(shù)時并不需要帶上 self 參數(shù)
3、Python 總是首先查找對應(yīng)類型的方法,如果它不能在派生類中找到對應(yīng)的方法,它才開始到基類中逐個查找
。(先在本類中查找調(diào)用的方法,找不到才去基類中找)。
如果在繼承元組中列了一個以上的類,那么它就被稱作"多重繼承" 。
如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法:
__private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類的外部被使用或直接訪問。在類內(nèi)部的方法中
使用時 self.__private_attrs。
foo: 定義的是特殊方法,一般是系統(tǒng)定義名字 ,類似 init() 之類的。
_foo: 以單下劃線開頭的表示的是 protected
類型的變量,即保護(hù)類型只能允許其本身與子類進(jìn)行訪問,不能用于 from module import *
__foo: 雙下劃線的表示的是私有類型(private)的變量, 只能是允許這個類本身進(jìn)行訪問了。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
- 上一篇: 数组array的一些用法
- 下一篇: protobuf在go中的应用