scrapy選擇器概括

python 爬蟲: srcrapy框架xpath和css選擇器語法

Xpath基本語法

1、經常使用的路徑表達式:css

表達式 描述 實例
nodename 選取nodename節點的全部子節點 //div
/ 從根節點選取 /div
// 選取全部的節點,不考慮他們的位置 //div
. 選取當前節點 ./div
.. 選取當前節點的父節點 ..
@ 選取屬性 //@class

舉例元素標籤爲artical標籤node

語法 說明  
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(..) 解析出父節點下全部文字  

2、謂語 python

謂語被嵌在方括號內,用來查找某個特定的節點或包含某個制定的值的節點框架

語法 說明
/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的節點

3、通配符函數

Xpath經過通配符來選取未知的XML元素spa

表達式| 結果//* |選取全部元素//div/* |選取全部屬於div元素的全部子節點//div[@*] |選取全部帶屬性的元素文檔

4、取多個路徑get

使用「|」運算符能夠選取多個路徑input

表達式 結果
//div | //table 選取文檔中全部的div和table節點
//div/a | //div/p 選取全部div元素的a和p 元素
artical/div/pl | //span 選取全部div下的pl和文檔中全部span

5、Xpath軸 string

軸能夠定義相對於當前節點的節點集

軸名稱 表達式 描述
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::* 選取當前節點的全部屬性

6、功能函數

使用功能函數可以更好的進行模糊搜索

函數 用法 解釋
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標籤下的文本
相關文章
相關標籤/搜索