Python 中的 XPATH 语法验证器

Sim*_*tis 1 python xpath web-crawler web-scraping

我开发了一个有很多动作的爬虫。涉及许多 xpath,因此我使用 json 文件进行存储。然后爬虫开始运行我想对 xpath 进行基本语法检查(在使用 xpath 之前),并针对无效的 xpath 引发错误。

例如:

xpath1 = '//*[@id="react-root"]/section'
xpath2 = '//*[[@id="react-root"]/section'
xpath3 = '//*[@id="react-root"]\section'
Run Code Online (Sandbox Code Playgroud)

从这些 xpath 中,只有 xpath1 有效

是否有任何模块或正则表达式可以进行这种验证?

gz.*_*gz. 7

您可以编译 xpath 字符串,lxml.etree.XPath如果语法不正确,则会引发异常:

>>> import lxml.etree
>>> lxml.etree.XPath('//*[@id="react-root"]/section')
//*[@id="react-root"]/section
>>> lxml.etree.XPath('//*[[@id="react-root"]/section')
Traceback (most recent call last):
  ...
lxml.etree.XPathSyntaxError: Invalid expression
>>> lxml.etree.XPath(r'//*[@id="react-root"]\section')
Traceback (most recent call last):
  ...
lxml.etree.XPathSyntaxError: Invalid expression
Run Code Online (Sandbox Code Playgroud)