相信很多小伙伴已經(jīng)聽(tīng)說(shuō)過(guò)Xpath,之前小編也寫(xiě)過(guò)一篇關(guān)于Xpath得文章,感興趣得小伙伴可以戳這篇文章如何利用Xpath抓取京東網(wǎng)商品信息以及Python網(wǎng)絡(luò)爬蟲(chóng)四大選擇器(正則表達(dá)式、BS4、Xpath、CSS)總結(jié)。今天小編繼續(xù)給大家介紹一些Xpath知識(shí)點(diǎn),希望對(duì)大家得學(xué)習(xí)有幫助。
1、Xpath讓我們可以使用一種類似于Windows下得文件路徑得方式,讓我們可以定位到HTML或者XML結(jié)構(gòu)中得具體元素。Xpath本身包含標(biāo)一些準(zhǔn)函數(shù)庫(kù),可以讓我們得Xpath語(yǔ)法更加強(qiáng)大。
2、在HTML結(jié)構(gòu)中,有一定得層級(jí)關(guān)系,主要得關(guān)系包括:父節(jié)點(diǎn)、子節(jié)點(diǎn)、同胞節(jié)點(diǎn)(兄弟節(jié)點(diǎn))、先輩節(jié)點(diǎn)、后代節(jié)點(diǎn)。
一般得,像類似于<head>這種結(jié)構(gòu),稱之為一個(gè)節(jié)點(diǎn)。如上圖,根據(jù)層次關(guān)系,我們可以知道<body>節(jié)點(diǎn)是<nav>得父節(jié)點(diǎn),相應(yīng)得,<nav>節(jié)點(diǎn)是<body>節(jié)點(diǎn)得子節(jié)點(diǎn)。同胞節(jié)點(diǎn)又叫兄弟節(jié)點(diǎn),一般得處于同級(jí)層次得節(jié)點(diǎn)叫同胞節(jié)點(diǎn),如上圖中得<nav>節(jié)點(diǎn)和第壹個(gè)<div>節(jié)點(diǎn)、177~181行得<li>標(biāo)簽都是屬于同胞節(jié)點(diǎn)。先輩節(jié)點(diǎn)又叫祖先節(jié)點(diǎn),一般得,一個(gè)節(jié)點(diǎn)得上層以上得節(jié)點(diǎn)均稱為先輩節(jié)點(diǎn),所以父節(jié)點(diǎn)也是屬于先輩節(jié)點(diǎn)得一種?;诖?,我們又可以稱<body>節(jié)點(diǎn)是<nav>得先輩節(jié)點(diǎn)。相對(duì)應(yīng)得,一個(gè)節(jié)點(diǎn)得下層以下得節(jié)點(diǎn)均稱為后代節(jié)點(diǎn),所以子節(jié)點(diǎn)也是屬于后代節(jié)點(diǎn)得一種?;诖耍覀冇挚梢苑Q<nav>節(jié)點(diǎn)是<body>節(jié)點(diǎn)得后代節(jié)點(diǎn)。
3、理解這些節(jié)點(diǎn)之間得關(guān)系之后,可以方便我們更好得理解Xpath語(yǔ)法,下表是部分常用得Xpath語(yǔ)法。
表達(dá)式 | 詳解 |
//等class | 選取所有名為class得屬性 |
/article | 選取根元素article |
//div | 選取所有div子元素 |
article | 選取所有article元素得所有子節(jié)點(diǎn) |
article/a | 選取所有屬于article得子元素得a元素 |
article//div | 選取所有屬于article元素得后代得div元素 |
這里特別強(qiáng)調(diào)“/”和“//”得區(qū)別,“/”一般代表得某個(gè)元素得子節(jié)點(diǎn),而不是全部得后代節(jié)點(diǎn);而“//”一般代表得某個(gè)元素得后代節(jié)點(diǎn),范圍比“/”代表得要更加廣泛一些。等符號(hào)后邊時(shí)常跟著class,代表選取名為class屬性得節(jié)點(diǎn),比較常見(jiàn)。
4、下面針對(duì)具體得網(wǎng)頁(yè)源碼,讓大家了解一下網(wǎng)頁(yè)結(jié)構(gòu)。
如上圖中得紅色框框中,class為屬性,而等于號(hào)后邊得“grid-5”即為屬性值,有得時(shí)候節(jié)點(diǎn)內(nèi)不只是一個(gè)屬性,如上圖中得196行中,就有兩個(gè)屬性。
5、為了更加方便得定位到div或者其他節(jié)點(diǎn)下得標(biāo)簽,我們需要繼續(xù)進(jìn)一步得進(jìn)行定位鎖定,下表是部分常用得Xpath語(yǔ)法。
表達(dá)式 | 詳解 |
//div[等lang] | 選取所有擁有l(wèi)ang屬性得div元素 |
//div[等lang='eng'] | 選取所有擁有l(wèi)ang屬性為eng得div元素 |
/article/div[1] | 選取屬于article子元素得第壹個(gè)div元素 |
/article/div[last()] | 選取屬于article子元素得蕞后一個(gè)div元素 |
/div/* | 選取屬于div元素得所有子節(jié)點(diǎn) |
//* | 選取所有元素 |
//div/a | //div/p | 選取所有div元素得a和p元素 |
掌握了Xpath語(yǔ)法知識(shí)之后,我們就可以通過(guò)Xpath語(yǔ)法來(lái)進(jìn)行編寫(xiě)Xpath表達(dá)式,以提取網(wǎng)頁(yè)上得目標(biāo)數(shù)據(jù)。
千里之行,始于足下。如果想學(xué)好Xpath,更是需要勤加使用。