Python XPath 运算符常见错误及解决方法

2023-04-17 00:00:00 错误 运算符 解决方法
  1. SyntaxError: Invalid predicate

这个错误通常出现在 XPath 的谓词(Predicate)中,因为谓词括号内的表达式必须返回一个布尔值,否则就会引发此错误。

解决方法:检查谓词中的表达式是否正确,并确保它能返回一个布尔值。例如,下面的 XPath 表达式中,谓词缺失引号,导致出现了该错误。

//a[@href='pidancode.com']/text()

正确的写法应该是:

//a[@href='pidancode.com']/text()
  1. SyntaxError: Invalid token

这个错误通常是因为在 XPath 表达式中使用了非法字符,如逗号、点号等。

解决方法:检查 XPath 表达式中是否有非法字符,并确保所有的字符被正确引号。例如,下面的 XPath 表达式中,缺失了句点,导致出现了该错误。

//div[@class='content',]/h2/text()

正确的写法应该是:

//div[@class='content']/h2/text()
  1. TypeError: Argument 'nodeSet' has incorrect type

这个错误通常是因为没有将 XPath 表达式应用到正确的节点集上,例如将一个节点集的字符串传递给了一个需要节点集的函数。

解决方法:检查代码中使用的函数并确认它的参数是否正确。例如,下面的代码中,将一个字符串作为参数传递给了 lxml.html.fromstring() 函数,它需要一个节点集作为参数。

from lxml import html
tree = html.fromstring("pidancode.com")

正确的写法应该是:

from lxml import html
tree = html.fromstring("<html><body><div>pidancode.com</div></body></html>")
  1. ValueError: XPath error: invalid predicate

这个错误通常是因为谓词的语法不正确,或者表达式无法产生布尔结果。

解决方法:检查谓词的语法是否正确,并确保其表达式可以产生一个布尔结果。例如,下面的 XPath 表达式中,使用了无效的谓词语法。

//div[@class='content'][0]/p/text()

正确的写法应该是:

//div[@class='content'][1]/p/text()
  1. ValueError: XPath error: Invalid empty expression

这个错误通常是因为在表达式中缺失必要的内容,例如函数名、运算符或节点名称。

解决方法:检查 XPath 表达式中是否存在缺失的内容,并确保表达式完整。例如,下面的 XPath 表达式中,缺失了节点名称。

//@class

正确的写法应该是:

//*[@class]

总的来说,遇到这些错误时,需要细心地检查代码中运用的 XPath 表达式,并确保其语法与逻辑正确。

相关文章