Scrapy Xpath with text()包含

use*_*629 5 xpath scrapy

我正在使用scrapy,我正在尝试寻找包含特定文本的跨度.我有:

response.selector.xpath('//*[@class="ParamText"]/span/node()')
Run Code Online (Sandbox Code Playgroud)

返回:

<Selector xpath='//*[@class="ParamText"]/span/text()' data=u' MILES STODOLINK'>,
<Selector xpath='//*[@class="ParamText"]/span/text()' data=u'C'>,

<Selector xpath='//*[@class="ParamText"]/span/text()' data=u'  MILES STODOLINK'>]
Run Code Online (Sandbox Code Playgroud)

但是,当我跑:

>>> response.selector.xpath('//*[@class="ParamText"]/span[contains(text(),"STODOLINK")]')
Out[11]: []
Run Code Online (Sandbox Code Playgroud)

为什么包含函数不起作用?

har*_*r07 11

contains() 无法一次评估多个节点:

/span[contains(text(),"STODOLINK")]
Run Code Online (Sandbox Code Playgroud)

因此,如果内部有多个文本节点span,并且"STODOLINK"不在第一个文本节点子节点中span,那么contains()在上面的表达式中将无效.您应该尝试contains()对单个文本节点应用检查,如下所示:

//*[@class="ParamText"]/span[text()[contains(.,"STODOLINK")]]
Run Code Online (Sandbox Code Playgroud)

或者如果"STODOLINK"不一定直接位于span(可以嵌套在其他元素中span),那么您可以简单地使用.而不是text():

//*[@class="ParamText"]/span[contains(.,"STODOLINK")]
Run Code Online (Sandbox Code Playgroud)