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

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

4

1 回答 1

3

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

顺便说一句,您尝试使用的功能不是被调用matches吗?

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

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

另外,你说的(

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

) 与函数的语义相矛盾。在您的代码段中,您实际上是在寻找一个包含字母 a的字符串。不为一言

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

或者,如果您在较长的文本中寻找a作为单词,您可以结合使用matcheswith XPath 正则表达式

于 2012-06-21T19:11:30.903 回答