我想选择其text
包含的元素bar
。我有一个名为foo
一个Python变量,它的价值"bar"
,我想用这样的:在scrapy中的xPath选择器中使用python变量
foo = "bar"
response.xpath('//*[contains(text(), foo)]')
但它返回的所有元素!问题是什么?
我想选择其text
包含的元素bar
。我有一个名为foo
一个Python变量,它的价值"bar"
,我想用这样的:在scrapy中的xPath选择器中使用python变量
foo = "bar"
response.xpath('//*[contains(text(), foo)]')
但它返回的所有元素!问题是什么?
你尝试:
foo = "bar"
response.xpath('//*[contains(text(), "'+foo+'")]')
?
这是Mathiou的回答和contains
的正确XPath表达式的组合。不要忘记,即使在XPath表达式中,你也要处理字符串,并且必须告诉它你有一个字符串。
关于你的问题:
但它返回的所有元素!问题是什么?
你的XPath查询将返回“所有”元素,因为XPath的不能串('//*[contains(text(), foo)]'
)作为一个有效的变量中认出你的“富”,所以它返回空节点集合代替 - >这意味着,它种检查哪些元素包含一个空字符串,这基本上是所有元素=)
使用双引号和单引号,你的优势是这样的:
foo = "bar"
response.xpath("//*[contains(text(), '" + foo + "')]")
是的,这是我纠正了在评论中提到的:) – Mathiou