XPath是一種使用路徑表達式在XML文檔(或我們的HTML文檔)中選擇節(jié)點或節(jié)點集的技術。雖然XPath本身不是編程語言问窃,它也允許您編寫可以直接訪問特定HTML元素的表達式亥鬓,而無需遍歷整個HTML結構。
為什么要學習XPath
從網(wǎng)頁中提取數(shù)據(jù)時域庇,必須了解如何使用基本XPath表達式嵌戈。
比CSS選擇器更強大
它允許您以任何方向瀏覽DOM
可以匹配HTML元素內(nèi)的文本
文檔對象模型(Document Object Model)
我假設您已經(jīng)了解HTML,網(wǎng)頁是一個包含標簽內(nèi)文本的文檔听皿,通過描述諸如標題熟呛,段落,列表尉姨,鏈接等元素庵朝,為文檔增加含義。
讓我們看一個基本的HTML頁面又厉,以了解什么是文檔對象模型九府。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>What is the DOM ?</title>
</head>
<body>
<h1>DOM 101</h1>
<p>Websraping is awsome !</p>
<p>Here is my <a >blog</a></p>
</body>
</html>
該HTML代碼基本上是封裝在其他HTML內(nèi)容內(nèi)的HTML內(nèi)容。HTML層次結構可以視為樹覆致。我們已經(jīng)可以通過HTML代碼中的縮進看到該層次結構侄旬。
當您的Web瀏覽器解析此代碼時,它將創(chuàng)建一棵樹狀結構煌妈,該樹是HTML文檔的對象表示儡羔。它稱為文檔對象模型。
要記住的重要一點是璧诵,當您右鍵單擊+ inspect時汰蜘,在瀏覽器中看到的DOM可能與發(fā)送的實際HTML確實不同。也許執(zhí)行了一些Javascript代碼并動態(tài)更改了DOM腮猖!例如鉴扫,當您滾動Twitter帳戶時,瀏覽器會發(fā)送一個請求以獲取新的tweet澈缺,并且一些Javascript代碼將這些新的tweet動態(tài)添加到DOM坪创。
xPath語法
? 在Xpath術語中炕婶,與HTML一樣,存在不同類型的節(jié)點:根節(jié)點莱预,元素節(jié)點柠掂,屬性節(jié)點以及所謂的原子值,這是HTML文檔中文本節(jié)點的同義詞依沮。
? 每個元素節(jié)點都有一個父節(jié)點涯贞。在此示例中,section元素是p危喉,details和button的父元素宋渔。
? 元素節(jié)點可以具有任意數(shù)量的子節(jié)點。在我們的示例中辜限,li元素是ul元素的所有子元素皇拣。
? 兄弟姐妹是具有相同父代的節(jié)點。p薄嫡,詳細信息和按鈕是同級氧急。
? 祖先節(jié)點的父級和父級的父級...
? 后代節(jié)點的子代和子代的子代…
在HTML文檔中有多種類型的表達式來選擇節(jié)點,以下是最重要的表達式: