在scrapy中使用xPath选择器中的python变量

时间:2015-10-16 11:19:50

标签: python xpath scrapy

我想选择text包含bar的元素。我有一个名为foo的python变量,它的值是"bar",我想这样使用它:

foo = "bar"
response.xpath('//*[contains(text(), foo)]')

但它会返回所有元素!有什么问题?

3 个答案:

答案 0 :(得分:3)

你有没有尝试过:

foo = "bar"
response.xpath('//*[contains(text(), "'+foo+'")]')

这是Mathiou的答案和contains的正确XPath表达式的组合。不要忘记即使在XPath表达式中你正在处理字符串,你必须告诉它你有一个字符串。

答案 1 :(得分:2)

第一

关于你的问题:

  

但它会返回所有元素!有什么问题?

你的xpath-query返回" all"因为xpath无法识别你的" foo"在字符串('//*[contains(text(), foo)]')中作为有效变量,因此它返回空节点集而不是 - >这意味着它会检查哪些元素包含空字符串,这基本上就是所有元素=)

解决方案

使用双引号和单引号对您有利:

foo = "bar"
response.xpath("//*[contains(text(), '" + foo + "')]")

答案 2 :(得分:0)

这个怎么样:

foo = "bar"
response.xpath('//*[contains(text(), \''+foo+'\')]')