scrapy 2.3 其他XPath擴(kuò)展

2021-06-03 16:02 更新

scrapy選擇器還提供一個非常遺漏的xpath擴(kuò)展函數(shù) has-class 它會回來 True 對于具有所有指定HTML類的節(jié)點(diǎn)。

對于以下HTML::

<p class="foo bar-baz">First</p>
<p class="foo">Second</p>
<p class="bar">Third</p>
<p>Fourth</p>

你可以這樣使用它:

>>> response.xpath('//p[has-class("foo")]')
[<Selector xpath='//p[has-class("foo")]' data='<p class="foo bar-baz">First</p>'>,
 <Selector xpath='//p[has-class("foo")]' data='<p class="foo">Second</p>'>]
>>> response.xpath('//p[has-class("foo", "bar-baz")]')
[<Selector xpath='//p[has-class("foo", "bar-baz")]' data='<p class="foo bar-baz">First</p>'>]
>>> response.xpath('//p[has-class("foo", "bar")]')
[]

所以XPath //p[has-class("foo", "bar-baz")] 大致相當(dāng)于CSS p.foo.bar-baz . 請注意,在大多數(shù)情況下,它的速度較慢,因為它是一個純Python函數(shù),可以為問題中的每個節(jié)點(diǎn)調(diào)用,而CSS查找被轉(zhuǎn)換為xpath,因此運(yùn)行效率更高,因此性能方面,它的使用僅限于不容易用css選擇器描述的情況。

Parsel還簡化了添加自己的xpath擴(kuò)展。

parsel.xpathfuncs.set_xpathfunc(fnamefunc)[源代碼]

注冊要在xpath表達(dá)式中使用的自定義擴(kuò)展函數(shù)。

函數(shù) func 注冊于 fname 將為每個匹配節(jié)點(diǎn)調(diào)用標(biāo)識符,并將其傳遞給 context 參數(shù)以及從相應(yīng)的xpath表達(dá)式傳遞的任何參數(shù)。

如果 func 是 None ,將刪除擴(kuò)展功能。

查看更多 in lxml documentation .

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號