2012-06-21 5 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을 사용하고 있습니다. 나는 치료법에 익숙하지 않지만 어딘가에 네임 스페이스 접두사를 정의해야 할 것 같습니다.

현재는 사용하려는 기능이 아니며 matches이라고 할 수 있습니까?

이처럼 호출 할 수 있습니다 //h:h2[matches(., 'a', 'i')]

이 대안이 또한 //h:h2[contains(lower-case(.),'a')]

것, 당신이 (

가 무슨 잘못 (내가 선택하기 위해 노력하고있어 말? 단어 "a"를 포함하는 노드)

)은 함수의 의미와 모순됩니다. 스 니펫에서 실제로 이라는 문자가 포함 된 문자열을 찾고 있습니다. 을 단어으로 표시하지 않습니다. //h:h2[lower-case(.)='a']

을 아니면 더 긴 텍스트의 단어로를 찾고 있다면, 당신은의 사용을 결합 할 수 있습니다 :

A는 당신의 요소의 텍스트 만이 경우에는 사용을 시도 할 수 matchesXPath regular expressions입니다.

+0

감사합니다. '포함한다 '는 내가 원하는 방식대로 작동한다. –