1. 程式人生 > >scrapy選擇器歸納

scrapy選擇器歸納

http ont jpg 擁有 div tex tar pytho 們的

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

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選擇器歸納