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”的节点。)
答案 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 作为单词,则可以将matches
与XPath regular expressions结合使用。