XPath語法

相信寫過爬蟲的同學植袍,都知道XPath的存在片部。博主最近在學習Scrapy的時候,就了解了一下XPath語法生蚁,這里給大家簡單地介紹一下:

首先我們需要了解幾個 XPath 術語。
2017/3/3 16:02:29

節(jié)點(node)

在 XPath 中戏自,有七種類型的節(jié)點:元素邦投、屬性、文本擅笔、命名空間志衣、處理指令、注釋以及文檔(根)節(jié)點剂娄。XML 文檔是被作為節(jié)點樹來對待的蠢涝。樹的根被稱為文檔節(jié)點或者根節(jié)點。

以下面這xml文檔為例:

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

    <class>

    <student>
      <name gender="boy">Harry Potter</name>
      <ID>24</ID>
    </student>

    <student>
      <name gender="girl">Li Rose<font color=red>(monitor)</font></title>
      <ID>1</ID>
    </student>

    </class>

上面例子的節(jié)點為:

    <classs> (文檔節(jié)點/根節(jié)點)
    <ID>24</ID> (元素節(jié)點)
    gender="boy" (屬性節(jié)點) 

節(jié)點關系

父:每個元素以及屬性都有一個父阅懦。例子中<student>的父是<class>;
子:元素節(jié)點可有零個和二、一個或多個子。例子中<class>的子是<student>;
兄弟:擁有相同的父的節(jié)點耳胎。例子中<name>和<ID>是兄弟;
祖先:某節(jié)點的父惯吕、父的父,等等怕午。
后代:某節(jié)點的子废登、子的子,等等郁惜。

基本值(或稱原子值堡距,Atomic value)

基本值是無父或無子的節(jié)點。
上面例子的基本值為:

    Harry Potter
    "boy"

項目(Item)

項目是基本值或者節(jié)點兆蕉。


ok羽戒,接下來開始正式講解 XPath 語法(注意,以下表達式當然可以混合使用):

1 nodename

選取此節(jié)點的所有子節(jié)點虎韵。

from scrapy import Selector

def parse(self, response):
    selector=Selector(response)
    content=selector.xpath(class)# 選取 class 元素的所有子節(jié)點易稠。

2 /

從根節(jié)點選取。

from scrapy import Selector

def parse(self, response):
    selector=Selector(response)
    '''
    選取根元素 class包蓝。
    注釋:假如路徑起始于正斜杠( / )驶社,則此路徑始終代表到某元素的絕對路徑企量!
    '''
    content1=selector.xpath(/class)
    content2=selector.xpath(/class/student)

3 //

從匹配選擇的當前節(jié)點選擇文檔中的節(jié)點,而不考慮它們的位置亡电。

from scrapy import Selector

def parse(self, response):
    selector=Selector(response)
    content=selector.xpath(//ID)# 選取所有ID子元素届巩,而不管它們在文檔中的位置。

4 .

選取當前節(jié)點份乒。

5 ..

選取當前節(jié)點的父節(jié)點姆泻。

6 @

選取屬性。

from scrapy import Selector

def parse(self, response):
    selector=Selector(response)  
    # 選取所有gender="boy"屬性的節(jié)點冒嫡,而不管它們在文檔中的位置拇勃。
    content=selector.xpath(//[@gender="boy"])

7 謂語(Predicates)

/class/student[1]  
選取屬于 class 子元素的第一個 student 元素。

/class/student[last()]
選取屬于 class 子元素的最后一個 student 元素孝凌。

/class/student[last()-1]
選取屬于 class 子元素的倒數(shù)第二個 student 元素方咆。

/class/student[position()<3]
選取屬于 class 子元素的前兩個 student 元素。

/class/student[@gender]
選取所有擁有名為 gender 的屬性的 student 元素蟀架。

/class/student[@gender="boy"]
選取所有擁有 gender="boy" 屬性的 student 元素瓣赂。

/class/student[ID<50]
選取 class 元素的所有 student 元素,且其中的 ID 元素的值須小于 50片拍。

/class/student[ID<50]/name
選取 class 元素中的 student 元素的所有 name 元素煌集,且其中的 ID 元素的值須小于 35。

8 通配符

    1. *              匹配任何元素節(jié)點
    2. @*            匹配任何屬性節(jié)點
    3. node()        匹配任何類型的節(jié)點

9 拓展

對于如下的xml文檔(參照http://www.tuicool.com/articles/iqQFBn

<div id="test2">美女捌省,<font color=red>你的微信是多少苫纤?</font><div>

如果使用:
data = selector.xpath('//div[@id="test2"]/text()').extract()[0]
只能提取到“美女,”纲缓;

如果使用:
data = selector.xpath('//div[@id="test2"]/font/text()').extract()[0]
又只能提取到“你的微信是多少卷拘?”

到底我們要怎樣才能把“美女,你的微信是多少”提取出來祝高?

可以使用xpath的string(.)來達到目的

    data = selector.xpath('//div[@id="test2"])
    info = data.xpath('string(.)').extract()[0]

輕松搞定栗弟,沒有后顧之憂!工闺!



轉載請告知UШ铡!博主個人博客:http://www.kingboung.me
文章有不完善的地方陆蟆,請留言告知雷厂!My lord

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市遍搞,隨后出現(xiàn)的幾起案子罗侯,更是在濱河造成了極大的恐慌器腋,老刑警劉巖溪猿,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钩杰,死亡現(xiàn)場離奇詭異,居然都是意外死亡诊县,警方通過查閱死者的電腦和手機讲弄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來依痊,“玉大人避除,你說我怎么就攤上這事⌒剜遥” “怎么了瓶摆?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長性宏。 經(jīng)常有香客問我群井,道長,這世上最難降的妖魔是什么毫胜? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任书斜,我火速辦了婚禮,結果婚禮上酵使,老公的妹妹穿的比我還像新娘荐吉。我一直安慰自己,他們只是感情好口渔,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布样屠。 她就那樣靜靜地躺著,像睡著了一般缺脉。 火紅的嫁衣襯著肌膚如雪瞧哟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天枪向,我揣著相機與錄音勤揩,去河邊找鬼。 笑死秘蛔,一個胖子當著我的面吹牛陨亡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播深员,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼负蠕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了倦畅?” 一聲冷哼從身側響起遮糖,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叠赐,沒想到半個月后欲账,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屡江,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年赛不,在試婚紗的時候發(fā)現(xiàn)自己被綠了惩嘉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡踢故,死狀恐怖文黎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情殿较,我是刑警寧澤耸峭,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站淋纲,受9級特大地震影響抓艳,放射性物質發(fā)生泄漏。R本人自食惡果不足惜帚戳,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一玷或、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧片任,春花似錦偏友、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至产场,卻和暖如春鹅髓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背京景。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工窿冯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人确徙。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓醒串,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鄙皇。 傳聞我的和親對象是個殘疾皇子芜赌,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

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

  • 原文出處: j_hao104 一、選取節(jié)點常用的路勁表達式:表達式描述實例 nodename選取nodenam...
    三兩五閱讀 7,374評論 2 13
  • XPath 語法XPath 使用路徑表達式來選取 XML 文檔中的節(jié)點或節(jié)點集伴逸。節(jié)點是通過沿著路徑 (path) ...
    小豐豐_72a2閱讀 241評論 0 0
  • xpath使用路徑表達式在xml和html中進行導航 xpath節(jié)點關系: 父節(jié)點缠沈、子節(jié)點、同胞節(jié)點、先輩節(jié)點洲愤、后...
    眼君閱讀 397評論 0 1
  • Chapter 23(2) 學習自由落下的跑步法 現(xiàn)在颓芭,體會到重力可以讓你跑得快又輕松嗎?如果沒有也沒關系禽篱,接下來...
    歌唄lrf閱讀 360評論 0 0
  • 重啟手機、電腦無法解決時使用adb version命令查看一下adb的版本馍惹,如果低于1.0.3的話很可能是版本過低...
    Ten_Minutes閱讀 1,156評論 0 0