八爪魚有個(gè)Xpath工具,可以幫助大家寫Xpath一些簡(jiǎn)單的Xpath 位置:除了打開網(wǎng)頁步驟沒有Xpath工具以外,其他步驟都有,一般在自定義里, 點(diǎn)擊試試Xpath工具就可以打開 先介紹一下Xpath工具的界面 左上是填寫網(wǎng)址 左中是瀏覽器 左下是網(wǎng)頁源碼 但是Xpath工具的網(wǎng)頁源碼層次不分明,不太好看 查看網(wǎng)頁源碼這部分還是火狐的firepath比較好用 火狐和一些基本Xpath用法在官網(wǎng)Xpath教程里有教 http://www./tutorial?tag=xpath 右上是定位參數(shù)(工具將根據(jù)你填寫的參數(shù)生成Xpath) 右下是點(diǎn)擊生成后生成的Xpath 然后我們來看一下定位參數(shù) 元素標(biāo)簽名稱:火狐里所有的藍(lán)色字體就是元素標(biāo)簽名稱,如下:span, a, hr, br等,具體你要填什么就要到火狐里看你要定位的那行代碼的最前面的藍(lán)色字體是什么,這里就寫什么,火狐里看得比較清楚。 元素位置:默認(rèn)填了1,這個(gè)位置的意思就是第幾個(gè),一般沒什么用,因?yàn)榛鸷镒詣?dòng)生成的Xpath很多都是用位置定位的,要用這個(gè)不如用火狐生成來得快 元素ID屬性值,元素name屬性值,元素class屬性值: 屬性值就是一行源碼內(nèi)用<>尖括號(hào)括起來的參數(shù),會(huì)有很多,不定 這里的三個(gè)屬性值是大部分網(wǎng)頁都會(huì)有的屬性值,這里只有三種,但是生成后自己改也是可以的 例: 這行源碼里就有class屬性,href屬性,style屬性,type屬性,4個(gè)屬性 每個(gè)都可以用來定位,根據(jù)不同需要 如果要用class屬性值定位就直接把class=后面雙引號(hào)內(nèi)部的參數(shù)復(fù)制出來,粘到格子里按生成就會(huì)自動(dòng)生成以class屬性值定位的Xpath代碼 例: 如果想用href屬性值定位,也是將href=后面雙引號(hào)內(nèi)部的參數(shù)復(fù)制出來,隨便粘到一個(gè)屬性值里按生成,比如粘到class里,再把Xpath里的class改成href就可以了 例: 將href=后面雙引號(hào)內(nèi)部的參數(shù)復(fù)制出來,隨便粘到一個(gè)屬性值里按生成,這時(shí)按匹配一般是什么也匹配不到的 然后要把class改成href就可以了匹配到了 可以把這串代碼復(fù)制到火狐里驗(yàn)證一下,結(jié)果是一樣的 元素文本:是火狐里的所有黑色字體,一般是會(huì)在網(wǎng)頁顯示出來我們可以直接看到的字體 如果要填這一格,填的必須是全部的文本,少一個(gè)空格標(biāo)點(diǎn)符號(hào),全角半角不一致都會(huì)導(dǎo)致定位不到,不過要是是純文字的那就沒問題 元素文本包含字符串:包含,顧名思義就是只要文本里有就會(huì)定位出來,不用管什么標(biāo)點(diǎn)符號(hào)空格 元素文本開始字符串:就是前幾個(gè)字,如果源碼里是以什么空格標(biāo)點(diǎn)符號(hào)之類的開頭的,如果這里沒寫,就定位不到 父元素,子元素,這兩個(gè)是對(duì)應(yīng)的, 前面元素,后面元素也是對(duì)應(yīng)的。 這里是看層級(jí)關(guān)系,火狐里看很清楚,避免混亂,我只截取一層關(guān)系 上圖為例div是a的父元素,a是div的子元素 前面元素和后面元素說的是同級(jí)里的多個(gè)元素之間的關(guān)系 比如上圖的中間那個(gè)span為主,它的前面元素就是a,它的后面元素是span 這幾個(gè)按鈕的主要功能是用于想要的數(shù)據(jù)沒有可定位的參數(shù),或者有參數(shù)但是不可用的時(shí)候,要用先定位到要的數(shù)據(jù)附近,再看是前后關(guān)系,還是父子關(guān)系,定位到想要的數(shù)據(jù) 定位的路有很多條,這條走不通就換一條,大多數(shù)都可以的 好了,界面基礎(chǔ)知識(shí)就講完了 我們來看實(shí)例吧。 實(shí)例一: http://data.eastmoney.com/bbsj/201506/yjyg.html 翻頁死循環(huán) 一般八爪魚自動(dòng)生成的Xpath是定位文本,就是下面這張圖,前面翻頁都正常 但是它到最后一頁時(shí)依然可以定位到下一頁 八爪魚就會(huì)一直點(diǎn)一直采,死循環(huán)了 現(xiàn)在要觀察網(wǎng)頁源碼 39頁的下一頁與40頁的下一頁代碼有什么不同 可以發(fā)現(xiàn),最后一頁的時(shí)候比前一頁,多了class屬性和少了title屬性,這樣看最簡(jiǎn)單的就有兩條路可以走,用class或者用title都可以。 先復(fù)制八爪魚里自動(dòng)生成的下一頁代碼,但是如果八爪魚生成不是文本定位的就要自己生成一下 定位到下一頁了 再加class,最后一頁才有class,前面沒有,那我的Xpath就是不存在class的下一頁,不存在不會(huì)寫,那就換title吖,就是存在title的下一頁,這個(gè)簡(jiǎn)單 隨便點(diǎn)一個(gè)屬性值,因?yàn)槲覀冎灰?/font>title就行了,不用限定屬性值,屬性值為空,點(diǎn)生成,就是上圖, 把class改成title,=''和中間的*號(hào)都去掉,匹配一下,先看39頁可以匹配到 然后翻到40頁,最后一頁 匹配不到,就對(duì)了,在最后一頁不能讓它定位到下一頁,定位到了八爪魚就會(huì)一直翻,這條Xpath替換掉循環(huán)翻頁的Xpath就可以了 實(shí)例二: http://data./p2p/index.html 沒有下一頁,但是當(dāng)前頁有標(biāo)識(shí),每次定位到當(dāng)前頁的下一頁即可正常翻頁 首先觀察網(wǎng)頁及源碼,網(wǎng)頁可以看到當(dāng)前頁碼是標(biāo)綠的,一般來說要顯示綠色就要在源碼里寫特定的參數(shù) 我們看源碼就可以看到,當(dāng)前頁li里class參數(shù)的屬性值是active,其他頁的li的class參數(shù)的屬性值是空的,我們就可以用active為標(biāo)識(shí)先定位到當(dāng)前頁,再定位當(dāng)前頁的后一個(gè)頁碼,放到翻頁點(diǎn)擊元素里就會(huì)每次點(diǎn)擊當(dāng)前頁的后一頁,實(shí)現(xiàn)翻頁。 在Xpath工具里把知道的參數(shù)都填進(jìn)去,定位到當(dāng)前頁碼, 點(diǎn)后面元素 定義后面第一個(gè)li 再向下定位到li內(nèi)的第一個(gè)a
一般的網(wǎng)站可能寫到這里就可以了 一種方法是找不同定位條件,增加定位條件 一種方法是先縮小定位范圍,在頁碼范圍內(nèi)找我們剛才寫的Xpath 當(dāng)然還有很多方法,條條大路通羅馬,根據(jù)你日漸對(duì)Xpath的熟悉還會(huì)有更多的方法 這里就不一一列舉了 找不同定位條件,增加定位條件:其實(shí)這方法就是跟實(shí)例二一樣,結(jié)合起來就可以了 我們來看一下“先縮小定位范圍,在頁碼范圍內(nèi)找我們剛才寫的Xpath”這個(gè)辦法這個(gè)方法很簡(jiǎn)單,在火狐里就可以完成了 先生成一個(gè)頁碼范圍內(nèi)的Xpath 從后到前一層一層的刪掉,就可以擴(kuò)大選擇范圍,下圖就是已經(jīng)擴(kuò)大到我們需要的包含全部的頁碼范圍了 再把剛剛在Xpath工具里生成的Xpath接到后面去,就只定位到一個(gè)元素了,自己做好可以多翻幾頁看看是不是定位到當(dāng)前頁的后面一個(gè)頁碼,沒問題就可以把這條Xpath粘到八爪魚里了。
|
|