XPATH

當(dāng)我們在網(wǎng)頁中爬取數(shù)據(jù)中,如果我們需要從網(wǎng)頁的HTML標(biāo)簽中獲取數(shù)據(jù)時(shí),使用正則表達(dá)式進(jìn)行匹配會(huì)比較繁瑣,因此引入 xpath 個(gè)概念

簡介

XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進(jìn)行遍歷趟卸。

在程序中使用xpath時(shí)需要lxm包的支持:

pip install lxml
# 程序中導(dǎo)入
from lxml import etree

XPATH 術(shù)語介紹

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

請看下面這個(gè) XML 文檔:

<bookstore>

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

</bookstore>

上面的XML文檔中的節(jié)點(diǎn)例子:

<bookstore> (文檔節(jié)點(diǎn))
<author>J K. Rowling</author> (元素節(jié)點(diǎn))
lang="en" (屬性節(jié)點(diǎn)) 

基本值的例子:

J K. Rowling
"en"

節(jié)點(diǎn)之間的關(guān)系

父(Parent)
每個(gè)元素以及屬性都有一個(gè)父
在下面的例子中赠幕,book 元素是 title、author、year 以及 price 元素的父:

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

子(Children)
元素節(jié)點(diǎn)可有零個(gè)焦履、一個(gè)或多個(gè)子岛琼。
在下面的例子中,title仿滔、author惠毁、year 以及 price 元素都是 book 元素的子:

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

先輩(Ancestor)
某節(jié)點(diǎn)的父、父的父崎页,等等鞠绰。
在下面的例子中,title 元素的先輩是 book 元素和 bookstore 元素:

<bookstore>

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

</bookstore>

后代(Descendant)

某個(gè)節(jié)點(diǎn)的子飒焦,子的子蜈膨,等等。

在下面的例子中,bookstore 的后代是 book翁巍、title驴一、author、year 以及 price 元素:

<bookstore>

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

</bookstore>

選取節(jié)點(diǎn)

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>
表達(dá)式 描述
nodename 選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)曙咽。
/ 從根節(jié)點(diǎn)選取蛔趴。
// 從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮它們的位置例朱。
. 選取當(dāng)前節(jié)點(diǎn)孝情。
.. 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。
@ 選取屬性洒嗤。

實(shí)例

在下面的表格中箫荡,我們已列出了一些路徑表達(dá)式以及表達(dá)式的結(jié)果:

路徑表達(dá)式 結(jié)果
bookstore 選取 bookstore 元素的所有子節(jié)點(diǎn)。
/bookstore 選取根元素 bookstore渔隶。
注釋:假如路徑起始于正斜杠( / )羔挡,則此路徑始終代表到某元素的絕對路徑!
bookstore/book 選取屬于 bookstore 的子元素的所有 book 元素间唉。
//book 選取所有 book 子元素绞灼,而不管它們在文檔中的位置。
bookstore//book 選擇屬于 bookstore 元素的后代的所有 book 元素呈野,而不管它們位于 bookstore 之下的什么位置低矮。
//@lang 選取名為 lang 的所有屬性。

謂語(Predicates)
謂語用來查找某個(gè)特定的節(jié)點(diǎn)或者包含某個(gè)指定的值的節(jié)點(diǎn)被冒。
謂語被嵌在方括號(hào)中军掂。

實(shí)例
在下面的表格中,我們列出了帶有謂語的一些路徑表達(dá)式昨悼,以及表達(dá)式的結(jié)果:

路徑表達(dá)式 結(jié)果
/bookstore/book[1] 選取屬于 bookstore 子元素的第一個(gè) book 元素蝗锥。
/bookstore/book[last()] 選取屬于 bookstore 子元素的最后一個(gè) book 元素。
/bookstore/book[last()-1] 選取屬于 bookstore 子元素的倒數(shù)第二個(gè) book 元素率触。
/bookstore/book[position()<3] 選取最前面的兩個(gè)屬于 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找颓。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末合愈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌佛析,老刑警劉巖益老,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寸莫,居然都是意外死亡捺萌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門膘茎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桃纯,“玉大人,你說我怎么就攤上這事披坏√梗” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵棒拂,是天一觀的道長伞梯。 經(jīng)常有香客問我,道長帚屉,這世上最難降的妖魔是什么谜诫? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮攻旦,結(jié)果婚禮上喻旷,老公的妹妹穿的比我還像新娘。我一直安慰自己敬特,他們只是感情好掰邢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伟阔,像睡著了一般辣之。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上皱炉,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天怀估,我揣著相機(jī)與錄音,去河邊找鬼合搅。 笑死多搀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灾部。 我是一名探鬼主播康铭,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赌髓!你這毒婦竟也來了从藤?” 一聲冷哼從身側(cè)響起催跪,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夷野,沒想到半個(gè)月后懊蒸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悯搔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年骑丸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妒貌。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡通危,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苏揣,到底是詐尸還是另有隱情黄鳍,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布平匈,位于F島的核電站框沟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏增炭。R本人自食惡果不足惜忍燥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隙姿。 院中可真熱鬧梅垄,春花似錦、人聲如沸输玷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欲鹏。三九已至机久,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赔嚎,已是汗流浹背膘盖。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尤误,地道東北人侠畔。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像损晤,于是被迫代替她去往敵國和親软棺。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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