scrapy選擇器歸納
阿新 • • 發佈:2019-01-28
http ont jpg 擁有 div tex tar pytho 們的
Xpath基本語法
一、常用的路徑表達式:
表達式 | 描述 | 實例 |
---|---|---|
nodename | 選取nodename節點的所有子節點 | //div |
/ | 從根節點選取 | /div |
// | 選取所有的節點,不考慮他們的位置 | //div |
. | 選取當前節點 | ./div |
.. | 選取當前節點的父節點 | .. |
@ | 選取屬性 | //@class |
舉例元素標簽為artical標簽
語法 | 說明 | |
---|---|---|
artical | 選取所有artical元素的子節點 | |
/artical | 選取根元素artical | |
./artical | 選取當前元素下的artical |
|
../artical | 選取父元素下的artical | |
artical/a | 選取所有屬於artical的子元素a元素 | |
//div | 選取所有div 子元素,無論div在任何地方 | |
artical//div | 選取所有屬於artical的div 元素,無論div元素在artical的任何位置 | |
//@class | 選取所有名為class 的屬性的 | |
a/@href | 選取a標簽的href屬性 | |
a/text() | 選取a標簽下的文本 | |
string(.) | 解析出當前節點下所有文字 | |
string(..) | 解析出父節點下所有文字 |
二、謂語
謂語被嵌在方括號內,用來查找某個特定的節點或包含某個制定的值的節點
語法 | 說明 |
---|---|
/artical/div[1] | 選取所有屬於artical 子元素的第一個div元素 |
/artical/div[last()] | 選取所有屬於artical子元素的最後一個div元素 |
/artical/div[last()-1] | 選取所有屬於artical子元素的倒數第2個div元素 |
/artical/div[position()<3] | 選取所有屬於artical子元素的前2個div元素 |
//div[@class] | 選取所有擁有屬性為class的div節點 |
//div[@class="main"] | 選取所有div下class屬性為main的div節點 |
//div[price>3.5] |
選取所有div下元素值price大於3.5的節點 |
三、通配符
Xpath通過通配符來選取未知的XML元素
表達式| 結果//* |選取所有元素//div/* |選取所有屬於div元素的所有子節點//div[@*] |選取所有帶屬性的元素
四、取多個路徑
使用“|”運算符可以選取多個路徑
表達式 | 結果 |
---|---|
//div | //table | 選取文檔中所有的div和table節點 |
//div/a | //div/p | 選取所有div元素的a和p 元素 |
artical/div/pl | //span | 選取所有div下的pl和文檔中所有span |
五、Xpath軸
軸可以定義相對於當前節點的節點集
軸名稱 | 表達式 | 描述 |
---|---|---|
ancestor | ./ancestor::* | 選取當前節點的所有先輩節點(父、祖父) |
ancestor-or-self | ./ancestor-or-self::* | 選取當前節點的所有先輩節點以及節點本身 |
descendant | ./descendant::* | 返回當前節點的所有後代節點(子節點、孫節點) |
child | ./child::* | 返回當前節點的所有子節點 |
parent | ./parent::* | 選取當前節點的父節點 |
following | ./following::* | 選取文檔中當前節點結束標簽後的所有節點 |
following-sibling | ./following-sibling::* | 選取當前節點之後的兄弟節點 |
preceding | ./preceding::* | 選取文檔中當前節點開始標簽前的所有節點 |
preceding-sibling | ./preceding-sibling::* | 選取當前節點之前的兄弟節點 |
self | ./self::* | 選取當前節點 |
attribute | ./attribute::* | 選取當前節點的所有屬性 |
六、功能函數
使用功能函數能夠更好的進行模糊搜索
函數 | 用法 | 解釋 |
---|---|---|
starts-with | //div[starts-with(@id,"ma")] | 選取id值以ma開頭的div節點 |
contains | //div[contains(@id,"ma")] | 選取所有id值包含ma的div節點 |
and | //div[contains(@id,"ma") and contains(@id,"in")] | 選取id值包含ma和in的div節點 |
text() | //div[contains(text(),"ma")] | 選取節點文本包含ma的div節點 |
CSS選擇器語法
語法 | 說明 |
---|---|
* | 選擇所有節點 |
#container | 選擇id為container的節點 |
.container | 選擇所有class包含container的節點 |
div,p | 選擇所有 div 元素和所有 p 元素 |
li a | 選取所有li 下所有a節點 |
ul + p | 選取ul後面的第一個p元素 |
div#container > ul | 選取id為container的div的第一個ul子元素 |
ul ~p | 選取與ul相鄰的所有p元素 |
a[title] | 選取所有有title屬性的a元素 |
a[href="http://baidu.com"] | 選取所有href屬性為http://baidu.com的a元素 |
a[href*="baidu"] | 選取所有href屬性值中包含baidu的a元素 |
a[href^="http"] | 選取所有href屬性值中以http開頭的a元素 |
a[href$=".jpg"] | 選取所有href屬性值中以.jpg結尾的a元素 |
input[type=radio]:checked | 選擇選中的radio的元素 |
div:not(#container) | 選取所有id為非container 的div屬性 |
li:nth-child(3) | 選取第三個li元素 |
li:nth-child(2n) | 選取第偶數個li元素 |
a::attr(href) | 選取a標簽的href屬性 |
a::text | 選取a標簽下的文本 |
scrapy選擇器歸納