2012-06-21 151 views
1
hxs.select("//h:h2[re:test(., 'a', 'i')]").extract() 


Undefined namespace prefix 
xmlXPathEval: evaluation failed 
Traceback (most recent call last): 
File "<console>", line 1, in <module> 
File "/usr/local/lib/python2.7/dist-packages/scrapy/selector/libxml2sel.py", line 44,  in select 
raise ValueError("Invalid XPath: %s" % xpath) 
ValueError: Invalid XPath: //h:h2[re:test(., 'a', 'i')] 

我是新來的XPath和Scrapy。Scrapy:無效的XPath

它有什麼問題? (我試圖選擇包含單詞「a」的節點)。

回答

3

根據回溯,您使用的是未定義的名稱空間前綴re。我不熟悉scrapy,但似乎你必須在某處定義命名空間前綴。

BTW,是不是你想叫matches使用的功能?

你可以這樣調用它://h:h2[matches(., 'a', 'i')]

另一種方法是 //h:h2[contains(lower-case(.),'a')]

另外,你說的話(

什麼地方錯了,(我想選擇?節點包含 字「a」)。

)與函數的語義相矛盾。在你的代碼片段中,你實際上正在尋找一個字符串,包含字母a。不爲一個作爲字

如果是在你的元素的正文,你也可以嘗試使用: //h:h2[lower-case(.)='a']

或者,如果你正在尋找一個作爲在一個較長的文字一個字,你可以結合使用matchesXPath regular expressions

+0

謝謝。 'contains'按我需要的方式工作。 –