I'm using scrapy, and I'm trying to look for a span that contains a specific text. I have:
response.selector.xpath('//*[@class="ParamText"]/span/node()')
which returns:
<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'>]
However when I run:
>>> response.selector.xpath('//*[@class="ParamText"]/span[contains(text(),"STODOLINK")]')
Out[11]: []
Why does the contains function not work?
contains()
can not evaluate multiple nodes at once :
/span[contains(text(),"STODOLINK")]
So, in case there are multiple text nodes within the span
, and "STODOLINK"
isn't located in the first text node child of the span
, then contains()
in the above expression won't work. You should try to apply contains()
check on individual text nodes as follow :
//*[@class="ParamText"]/span[text()[contains(.,"STODOLINK")]]
Or if "STODOLINK"
isn't necessarily located directly within span
(can be nested within other element in the span
), then you can simply use .
instead of text()
:
//*[@class="ParamText"]/span[contains(.,"STODOLINK")]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With