Scrapy:无效的XPath

时间:2012-06-21 18:47:15

标签: xpath scrapy

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的新手。

它出了什么问题? (我正在尝试选择包含单词“a”的节点。)

1 个答案:

答案 0 :(得分:3)

根据回溯,您使用的是未定义的命名空间前缀re。我不熟悉scrapy,但似乎你必须在某处定义名称空间前缀。

顺便说一下,你试图使用的功能不是matches吗?

您可以这样称呼它://h:h2[matches(., 'a', 'i')]

另一种选择 //h:h2[contains(lower-case(.),'a')]

另外,你说的是什么(

  

它出了什么问题? (我正在尝试选择包含该节点的节点   单词“a”)。

)与函数的语义相矛盾。在您的代码段中,您实际上正在寻找包含字母a 的字符串。不适用于 a as a word

如果a是元素中的唯一文本,您还可以尝试使用: //h:h2[lower-case(.)='a']

或者,如果您在较长的文字中搜索 a 作为单词,则可以将matchesXPath regular expressions结合使用。