我想選擇其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