xpath使用筆記

xpath學(xué)習(xí)筆記

xpath簡(jiǎn)介

  1. xpath 用于在XML文檔中通過(guò)元素和屬性進(jìn)行導(dǎo)航
  2. xpath 使用路徑表達(dá)式來(lái)選取 XML 或 HTML 中的節(jié)點(diǎn)或者節(jié)點(diǎn)集搅吁。

xpath 節(jié)點(diǎn)

  1. 在 xpath 中 有七種類型的節(jié)點(diǎn):
  • 元素
  • 屬性
  • 文本
  • 命名空間
  • 處理指令
  • 注釋
  • 文檔根節(jié)點(diǎn)
  1. 節(jié)點(diǎn)關(guān)系
  • 父級(jí)
  • 子級(jí)
  • 同輩級(jí)
  • 先輩級(jí)
  • 后代級(jí)

xpath 語(yǔ)法

表達(dá)式 描述 語(yǔ)法示例
nodename 選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn),用戶選取標(biāo)簽名 book
/ 從根節(jié)點(diǎn)選取 /book
// 從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn)汗洒,而不考慮他們的位置 //price 選擇任意位置的 price 標(biāo)簽
. 選取當(dāng)前節(jié)點(diǎn) --
.. 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn) --
@ 選取屬性 //@lang 選擇lang標(biāo)簽的所有屬性
[n] 選取屬于某元素下的第n個(gè)子元素,索引從1開始 /bookstore/book[2]
[last()] 選取屬于某個(gè)元素的最后一個(gè)元素 /book[last()] last() 當(dāng)作函數(shù)理解
[last()-1] 選取屬于某個(gè)元素的最后一個(gè)元素 /book[last()-1]
[position()] 做元素定位使用 /book[position()<3 選擇最前面兩個(gè)的book元素]
[@lang] 選擇有屬性為lang的元素 //book[@lang] 選擇有l(wèi)ang屬性的book標(biāo)簽
[@class=""] 選擇class屬性為某個(gè)值的元素 //div[@class="item"] 選擇類名為item的div標(biāo)簽
* 匹配任何元素節(jié)點(diǎn) --
@* 匹配任何屬性節(jié)點(diǎn) --
| 表示"或" //bookstore/book/title|//bookstore/book/price 表示匹配文章中 bookstore 下 book 標(biāo)簽下的 title 或這 price 標(biāo)簽

語(yǔ)法示例:

from lxml import etree

html = '''
<bookstore> 
  <book price="100" category="cooking"> 
    <title lang="en">Everyday Italian</title>  
    <author>Giada De Laurentiis</author>  
    <year>2005</year>  
    <price>30.00</price> 
  </book>  

  <book category="children"> 
    <title lang="cn">Harry Potter</title>  
    <author>J K. Rowling</author>  
    <year>2005</year>  
    <price>29.99</price> 
  </book>  

  <book category="web"> 
    <title category="web">XQuery Kick Start</title>  
    <author>James McGovern</author>  
    <author>Per Bothner</author>  
    <author>Kurt Cagle</author>  
    <author>James Linn</author>  
    <author>Vaidyanathan Nagarajan</author>  
    <year>2003</year>  
    <price>49.99</price> 
  </book> 

  <book category="web" cover="paperback" price="100"> 
    <title>Learning XML</title>  
    <author>Erik T. Ray</author>  
    <year>2003</year>  
    <price>39.95</price> 
  </book> 

</bookstore>

'''
# 將字符串轉(zhuǎn)為html對(duì)象
html = etree.HTML(html)


# 獲取bookstore下book標(biāo)簽的title標(biāo)簽
res = html.xpath('//bookstore/book/title')
print(res)
# 返回值(列表中是對(duì)象):[<Element title at 0x25c54df7388>, <Element title at 0x25c54df73c8>, <Element title at 0x25c54df7448>, <Element title at 0x25c54df7488>]

# 獲取bookstore下book標(biāo)簽的title標(biāo)簽中category屬性值為“web”
res = html.xpath('//bookstore/book/title[@category="web"]')
print(res)
# 返回值(列表中是對(duì)象):[<Element title at 0x1f0ec727388>]

# 獲取bookstore下book標(biāo)簽的title標(biāo)簽中category屬性值為“web”的標(biāo)簽的值
res = html.xpath('//bookstore/book/title[@category="web"]/text()')
print(res)
# 返回值(列表中是字符串):['XQuery Kick Start']

# 獲取bookstore下book的price屬性為100的標(biāo)簽下的title()標(biāo)簽的值
res = html.xpath('//bookstore/book[@price="100"]/title/text()')
print(res)
# 返回值(列表中的是字符串):['Everyday Italian', 'Learning XML']

# 獲取bookstore 下book下第1個(gè)標(biāo)簽的所有屬性 [1]:表示選擇第幾個(gè)標(biāo)簽 @*:表示選擇所有的屬性
res = html.xpath('//bookstore/book[1]/@*')
print(res)
# 返回值(列表中是字符串)

# 獲取bookstore 下book帶有任意屬性的標(biāo)簽
res = html.xpath('//bookstore/book[@*]')
print(res)
# 返回值 (列表中的是對(duì)象):[<Element book at 0x17a7fb47388>, <Element book at 0x17a7fb473c8>, <Element book at 0x17a7fb47448>, <Element book at 0x17a7fb47488>]

# 獲取帶有屬性的title元素的值
res = html.xpath('//title[@*]/text()')
print(res)
# 返回值(列表中的是字符串):['Everyday Italian', 'Harry Potter', 'XQuery Kick Start']

# 獲取book下的 title 和 price 標(biāo)簽
res = html.xpath('//book/title | //book/price')
print(res)
# 返回值:(列表中的是對(duì)象):[<Element title at 0x256dc8773c8>, <Element price at 0x256dc877448>, <Element title at 0x256dc877488>, <Element price at 0x256dc8774c8>, <Element title at 0x256dc877508>, <Element price at 0x256dc877548>, <Element title at 0x256dc877588>, <Element price at 0x256dc8775c8>]

# 獲取book有category或price屬性的值
res = html.xpath('//book/@category | //book/@price')
print(res)
# 返回值 (列表中的是字符串):['100', 'cooking', 'children', 'web', 'web', '100']

補(bǔ)充:

  • items.xpath('.//div[starts-with(@class, "item")]')
    表示div的 class 屬性以 item 開頭
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悼沿,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牺荠,死亡現(xiàn)場(chǎng)離奇詭異翁巍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)休雌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門灶壶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人杈曲,你說(shuō)我怎么就攤上這事驰凛。” “怎么了担扑?”我有些...
    開封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵恰响,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我魁亦,道長(zhǎng)渔隶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任洁奈,我火速辦了婚禮间唉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘利术。我一直安慰自己呈野,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開白布印叁。 她就那樣靜靜地躺著被冒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪轮蜕。 梳的紋絲不亂的頭發(fā)上昨悼,一...
    開封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音跃洛,去河邊找鬼率触。 笑死,一個(gè)胖子當(dāng)著我的面吹牛汇竭,可吹牛的內(nèi)容都是我干的葱蝗。 我是一名探鬼主播,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼细燎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼两曼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起玻驻,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悼凑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體户辫,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡益老,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寸莫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡档冬,死狀恐怖膘茎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酷誓,我是刑警寧澤披坏,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站盐数,受9級(jí)特大地震影響棒拂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜玫氢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一帚屉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漾峡,春花似錦攻旦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至槽袄,卻和暖如春烙无,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遍尺。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工截酷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狮鸭。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓合搅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親歧蕉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灾部,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容