關於選擇器注意的點

2022-09-16 20:03:17 字數 4035 閱讀 7972

假如:css 選擇其中如果div元素下面有子節點a 和孫節點 imag

1: 如果要選擇imga 可以用('div imag') 但是不能用('div > imag')   這其中『 』 和 『>'的區別就是 『 』是選擇其所有的後輩節點,但是『>』只是選擇兒子節點。

2:選擇div下面的第二個a標籤可以用 ('div a:nth-child(2)')

對比xpath中的'/『僅僅指子元素不包括孫節點,可用』//『取所有後輩節點。選擇div下面的第二個a標籤可以用 ('div/a[2]')

同時需要注意,如果選擇其中涉及到多個樣式需要用到或的時候,css中沒有或的用法,需要做判斷,相對來說,用xpath的』|『比較簡單。

3:xpath根據文字內容查詢標籤

target="_blank">python的崛起,百萬程式設計師被影響?真相……   

根據部分內容匹配到這個a標籤的xpath語法:"//a[contains(text(),"python的崛起")]",這樣就可以匹配到了

4:xpath語法中contains的用法

//div[contains(@class,"td-01")]

表示class屬性中含有td-01div標籤

5:乙個標籤包含的屬性包含多個值的時候。

要取到上面所有的關注者人數和被瀏覽人數:

'//div[@class=「numberboard questionfollowstatus-counts numberboard--divider」]/div[1]//strong/text()'

』//div[contains(@class, "numberboard") and contains(@class, "questionfollowstatus-counts") and contains(@class, "numberboard-divider")]/div[1]//strong/text()'

css方式:css('.numberboard.questionfollowstatus-counts.numberboard--divider div strong::text')

補充:這裡只想取到關注著人數的時候用css('.numberboard.questionfollowstatus-counts.numberboard--divider div:nth-child(1) .numberboard-itemvalue::text')無效,瀏覽人數和關注人數都取出來了。

在知乎提取話題瀏覽人數與關注人數的時候,用xpath方式:提取關注人數:

response.xpath(』//div[contains(@class, "numberboard") and contains(@class, "questionfollowstatus-counts") and contains(@class, "numberboard-divider")]/div[1]//strong/text()')

提取瀏覽人數:

response.xpath(』//div[contains(@class, "numberboard") and contains(@class, "questionfollowstatus-counts") and contains(@class, "numberboard-divider")]/div[2]//strong/text()')

此方式在shell 中用scrapy shell進入網頁時候可以提取成功,但是放到scrapy中執行之後就少了乙個字段,然後改用css方法如下:

提取關注人數:

response.css('.numberboard.questionfollowstatus-counts.numberboard--divider div:nth-child(1) .numberboard-iteminner .numberboard-itemvalue::text')

提取瀏覽人數:

response.css('.numberboard.questionfollowstatus-counts.numberboard--divider div:nth-child(2) .numberboard-iteminner .numberboard-itemvalue::text')

同樣在shell中試了都可以提取出來,但是scrapy中的時候item欄位的值提取的一樣,都是瀏覽人數。

6: xpath選擇乙個同時含有多個標籤的屬性用』and『

books/book[@author='john' and @year='2009' and @language='en']

選擇class="c",並且包含id屬性的標籤。

response.css('div.c[id]')
相當於xpath:

response.xpath('//div[@class="c" and @id]')

//input[starts-with(@name,'name1')]     查詢name屬性中開始位置包含'name1'關鍵字的頁面元素

//input[contains(@name,'na')] 查詢name屬性中包含na關鍵字的頁面元素

css選擇其 src 屬性中包含 "abc" 子串的每個 元素

a[src*="abc"]
選擇文字中包含「難得的大集合,」的標籤

response.xpath('//*[contains(text(),"難得的大集合,")]')
特殊的如下:

電子賬戶這幾個字沒有被乙個明確的標籤包裹。此時再用//ul[@id='side-menu']/li/a[contains(text(),"電子賬戶")]表示式就到不到了.不過可以借助string(), 將a標籤裡邊的東西全部轉換成字串, 再用contains()判斷:

//ul[@id='side-menu']/li/a[contains(string(), '電子賬戶')]
選擇文字包含「下頁」的a標籤的href連線

response.css('a:contains("下頁")::attr(href)')

from scrapy import selector

target = """

[熱門]

ohmy金雨

: 回覆

@edward-9

:人生到底有沒有收穫

舉報贊[33]

回覆04月23日 17:45 來自網頁

"""selector = selector(text=target)

print(selector.css('a:nth-child(1)::text').extract()) # 原以為是找到第乙個 a標籤下面的文字即 「

ohmy金雨」,結果不是。

print(selector.css('a:nth-child(2)::text').extract()) # 此選擇也不是第二個 a標籤下的文字,而是後代標籤的第乙個。

輸出結果:

['@edward-9', '贊[33]', '回覆']

['ohmy金雨']

分析:之前一直以為css中的nth-child(n)和xpath中的[n]是一樣的道理,其實並不是,花了整整2個小時的實踐才知道並不是這樣的。

**中的 a:nth-child(1) 實際上意思是找到所有後代節點中作為第乙個子節點的a標籤,如果第乙個後代節點不是a標籤則不返回。而不是後代標籤中的第乙個a標籤,

當用 print(selector.css(':nth-child(2)').extract())的時候是就找到所有的作為第二個子節點存在的標籤。輸出:

['ohmy金雨', '

']response.css('div.c[id]')

jquery1 3關於選擇器的一些注意點

目前在使用jquery1.3的時候,發現有些做法和網上寫的已經有了一定的差異。目前發現的有 1 選擇器 1 選擇一組radio中被選中的radio 網上的寫法 input type radio checked 正確的寫法 input radio name channelsels checked tr...

jquery1 3關於選擇器的一些注意點

目前在使用jquery1.3的時候,發現有些做法和網上寫的已經有了一定的差異。目前發現的有 1 選擇器 1 選擇一組radio中被選中的radio 網上的寫法 input type radio checked 正確的寫法 input radio name channelsels checked tr...

關於JQuery的選擇器

1.id 根據給定的id來匹配元素 如果選擇器包含特殊字元,可以用兩個斜槓表示轉義 比如 查詢id為 mydiv 的元素 mydiv 這樣寫就可以查詢到所有id為 mydiv 的元素了。2.element 根據元素名來匹配所有元素 比如 查詢所有div元素就可以這樣寫 div 3.根據給定的類來匹配...