相信很多小伙伴已經(jīng)聽說過Xpath,之前小編也寫過一篇關(guān)于Xpath的文章,感興趣的小伙伴可以戳這篇文章如何利用Xpath抓取京東網(wǎng)商品信息以及Python網(wǎng)絡(luò)爬蟲四大選擇器(正則表達(dá)式、BS4、Xpath、CSS)總結(jié)。今天小編繼續(xù)給大家介紹一些Xpath知識(shí)點(diǎn),希望對(duì)大家的學(xué)習(xí)有幫助。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供乾安企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為乾安眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
1、Xpath讓我們可以使用一種類似于Windows下的文件路徑的方式,讓我們可以定位到HTML或者XML結(jié)構(gòu)中的具體元素。Xpath本身包含標(biāo)一些準(zhǔn)函數(shù)庫,可以讓我們的Xpath語法更加強(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)。
一般的,像類似于這種結(jié)構(gòu),稱之為一個(gè)節(jié)點(diǎn)。如上圖,根據(jù)層次關(guān)系,我們可以知道節(jié)點(diǎn)是的父節(jié)點(diǎn),相應(yīng)的,節(jié)點(diǎn)是節(jié)點(diǎn)的子節(jié)點(diǎn)。同胞節(jié)點(diǎn)又叫兄弟節(jié)點(diǎn),一般的處于同級(jí)層次的節(jié)點(diǎn)叫同胞節(jié)點(diǎn),如上圖中的節(jié)點(diǎn)和第一個(gè)
節(jié)點(diǎn)、177~181行的
標(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)的一種?;诖?,我們又可以稱節(jié)點(diǎn)是的先輩節(jié)點(diǎn)。相對(duì)應(yīng)的,一個(gè)節(jié)點(diǎn)的下層以下的節(jié)點(diǎn)均稱為后代節(jié)點(diǎn),所以子節(jié)點(diǎn)也是屬于后代節(jié)點(diǎn)的一種?;诖?,我們又可以稱節(jié)點(diǎn)是節(jié)點(diǎn)的后代節(jié)點(diǎn)。
3、理解這些節(jié)點(diǎn)之間的關(guān)系之后,可以方便我們更好的理解Xpath語法,下表是部分常用的Xpath語法。
這里特別強(qiáng)調(diào)“/”和“//”的區(qū)別,“/”一般代表的某個(gè)元素的子節(jié)點(diǎn),而不是全部的后代節(jié)點(diǎn);而“//”一般代表的某個(gè)元素的后代節(jié)點(diǎn),范圍比“/”代表的要更加廣泛一些。@符號(hào)后邊時(shí)常跟著class,代表選取名為class屬性的節(jié)點(diǎn),比較常見。
4、下面針對(duì)具體的網(wǎng)頁源碼,讓大家了解一下網(wǎng)頁結(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語法。
掌握了Xpath語法知識(shí)之后,我們就可以通過Xpath語法來進(jìn)行編寫Xpath表達(dá)式,以提取網(wǎng)頁上的目標(biāo)數(shù)據(jù)。
千里之行,始于足下。如果想學(xué)好Xpath,更是需要勤加使用,下一篇文章將給大家介紹Xpath在Scrapy爬蟲項(xiàng)目中的使用。