scrapy基礎 之 xpath網頁結構

2022-02-08 02:37:19 字數 3581 閱讀 9041

1 ,什麼是xpath

xpath 是一門在 xml 文件中查詢資訊的語言。xml是一種類似於html的傳輸協議

2,節點

xpath 中,有七種型別的節點:元素、屬性、文字、命名空間、處理指令、注釋以及文件(根)節點。

例項:

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

harry potter

j k. rowling

2005

29.99

解析: (文件節點)        j k. rowling (元素節點)        lang="en" (屬性節點)         j k. rowling(基本值)    #

一般把基本值或者節點叫做專案。

節點關係有父和子之分:

#父

harry potter #是book的子,同級的專案叫做同胞,title,auther,year 和price叫做同胞

j k. rowling #同上

2005 #同上

29.99 #同上

超過一級的父子節點關係叫做先輩和後代,比如父的父,子的子等

3,選取節點

xml例項:

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

harry potter

29.99

learning xml

39.95

#選取節點的規則

nodename 選取此節點的所有子節點。

/ 從根節點擊取。

// 從匹配選擇的當前節點擊擇文件中的節點,而不考慮它們的位置。

. 選取當前節點。

.. 選取當前節點的父節點。

@ 選取屬性。

節點擊取例項:

bookstore	選取 bookstore 元素的所有子節點。

/bookstore 選取根元素 bookstore。注釋:假如路徑起始於正斜槓( / ),則此路徑始終代表到某元素的絕對路徑!

bookstore/book 選取屬於 bookstore 的子元素的所有 book 元素。

//book 選取所有 book 子元素,而不管它們在文件中的位置。

bookstore//book 選擇屬於 bookstore 元素的後代的所有 book 元素,而不管它們位於 bookstore 之下的什麼位置。

//@lang 選取名為 lang 的所有屬性。

/bookstore/book/price/text() text()選取所有文字的意思

注意:如果 xpath 的開頭是乙個斜線(/)代表這是絕對路徑。如果開頭是兩個斜線(//)表示檔案中所有符合模式的元素都會被選出來,即使是處於樹中不同的層級也會被選出來。

謂語:

/bookstore/book[1]	選取屬於 bookstore 子元素的第乙個 book 元素。

/bookstore/book[last()] 選取屬於 bookstore 子元素的最後乙個 book 元素。

/bookstore/book[last()-1] 選取屬於 bookstore 子元素的倒數第二個 book 元素。

/bookstore/book[position()<3] 選取最前面的兩個屬於 bookstore 元素的子元素的 book 元素。

//title[@lang] 選取所有擁有名為 lang 的屬性的 title 元素。

//title[@lang='eng'] 選取所有 title 元素,且這些元素擁有值為 eng 的 lang 屬性。

/bookstore/book[price>35.00] 選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大於 35.00。

/bookstore/book[price>35.00]/title 選取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值須大於 35.00。

如何選取未知的節點:

*	匹配任何元素節點。

@* 匹配任何屬性節點。

node() 匹配任何型別的節點。

/bookstore/* 選取 bookstore 元素的所有子元素。 //* 選取文件中的所有元素。 //title[@*] 選取所有帶有屬性的 title 元素。

路徑表示式中使用"|"運算子,您可以選取若干個路徑:   

//book/title | //book/price 選取book 元素的所有 title 和 price 元素。

//title | //price 選取文件中的所有 title 和 price

4 軸通過 xpath 軸可以定義相對於當前節點的節點集。

ancestor	選取當前節點的所有先輩(父、祖父等)。

ancestor-or-self 選取當前節點的所有先輩(父、祖父等)以及當前節點本身。

attribute 選取當前節點的所有屬性。

child 選取當前節點的所有子元素。

descendant 選取當前節點的所有後代元素(子、孫等)。

descendant-or-self 選取當前節點的所有後代元素(子、孫等)以及當前節點本身。

following 選取文件中當前節點的結束標籤之後的所有節點。

namespace 選取當前節點的所有命名空間節點。

parent 選取當前節點的父節點。

preceding 選取文件中當前節點的開始標籤之前的所有節點。

preceding-sibling 選取當前節點之前的所有同級節點。

self 選取當前節點。

6 例項

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

everyday italian

giada de laurentiis

2005

30.00

harry potter

j k. rowling

2005

29.99

xquery kick start

james mcgovern

per bothner

kurt cagle

james linn

vaidyanathan nagarajan

2003

49.99

learning xml

erik t. ray

2003

39.95

選取所有的title:/bookstore/book/title

選取第乙個book下面的title:/bookstore/book[1]/title

選取price節點中所有的文字:/bookstore/book/price/text()

選取**高於35的所有price節點的文字:/bookstore/book[price>35]/price

選取**節點高於35的所有title節點:/bookstore/book[price>35]/title

scrapy爬蟲之xpath資料提取工具的使用

xpath是xml路徑語言,它是一種來確定xml文件某部分位置的語言 html屬於xml html的一般格式 表題資訊 head 我們網頁中看到的內容 body html 表示式 描述 標籤 選中根,或根下的第一層標籤 標籤 全域性匹配的標籤 點前節點 當前節點的父節點 選擇所有標籤 text 選中...

scrapy應用xpath語法

如 等等各種型別xpath語法可以用分號做分隔符來區分標籤 但是最需要注意的是標籤的屬性值和標籤下的內容 以及這個部分 下面將對這兩個部分書寫xpath div a text get 首先鎖定要查詢的父標籤 text response.xpath div id search nature rg ul...

爬蟲基礎之Xpath!

參見 參見div 1 獲取本頁面第乙個div div last 獲取本頁面最後乙個div div last 1 獲取倒數第二個div div 1 div last 獲取第乙個div和最後乙個div 從根節點擊取 從匹配選擇的當前節點擊擇文件中的節點,而不考慮它們的位置 div class title...