本篇是我在使用xpath中遇到的一些案例,做些筆記
xpath是什麼,簡而言之,就是可以把網頁的html碼當成Tree
並且用xpath去取得Tree中的某些nodes或leaves
若想了解更多關於xpath是什麼,可以考以下網站
http://www.w3schools.com/XPath/default.asp
以下的xpath實作是以jquery的$$x(“xpath”)`經由chrome brwser的console來操作
至於xpath的實際應用,可以用在web crawler中從網頁中擷取想要的東西
這樣就不需要自己寫個parser來處理html了
1.following-sibling, preceding-sibling:
首先來看以下這種情況
example1.html
這些數字是和br相鄰,而不是被它給包住
這時就要用到sibling來把數字取出
1
2
3
4
5
6
7
8
9
10
11
> $x ( "//br[3]/following-sibling::text()" )
[ " 4 " ]
> $x ( "//br[2]/following-sibling::text()" )
[ " 3 " , " 4 " ]
> $x ( "//br[1]/following-sibling::text()" )
[ " 2 " , " 3 " , " 4 " ]
> $x ( "//br[2]/preceding-sibling::text()" )
[ " 2 " , " 1 " ]
也可以把text和br的位置互換
1
2
3
4
5
6
7
8
9
10
11
> $x ( "//text()[following-sibling::br[3]]" )
[ " 1 " ]
> $x ( "//text()[following-sibling::br[2]]" )
[ " 1 " , " 2 " ]
> $x ( "//text()[following-sibling::br[1]]" )
[ " 1 " , " 2 " , " 3 " ]
> $x ( "//text()[preceding-sibling::br[2]]" )
[ " 3 " , " 4 " ]
2.table position() , last()
如果我們要取出以下表格中的某幾個column
example2.html 1
2
3
4
5
6
<table>
<tbody>
<tr> <td> 11</td><td> 12</td><td> 13</td><td> 14</td><td> 15</td><td> 16</td> </tr>
<tr> <td> 21</td><td> 22</td><td> 23</td><td> 24</td><td> 25</td><td> 26</td> </tr>
</tbody>
<table>
可以用這個方法
1
2
3
4
5
6
7
8
9
10
11
> $x ( "//table/tbody/tr/td[last()]/text()" )
[ "16" , "26" ]
> $x ( "//table/tbody/tr/td[last()-1]/text()" )
[ "15" , "25" ]
> $x ( "//table/tbody/tr/td[position() mod 3 = 1]/text()" )
[ "11" , "14" , "21" , "24" ]
> $x ( "//table/tbody/tr/td[position() mod 3 = 2]/text()" )
[ "12" , "15" , "22" , "25" ]
結語
以上是很簡單的幾個例子
除了使用jquery以外,python也有提供xpath的library
例如lxml
可參考以下這篇
http://lxml.de/xpathxslt.html