【问题标题】:XPATH syntax validator in PythonPython 中的 XPATH 语法验证器
【发布时间】:2018-10-13 13:58:38
【问题描述】:
我开发了一个包含许多操作的爬虫。许多 xpath 都涉及,因此我使用 json 文件进行存储。然后爬虫开始运行我想对 xpath 进行基本的语法检查(在使用 xpath 之前)并为无效的 xpath 引发错误。
例如:
xpath1 = '//*[@id="react-root"]/section'
xpath2 = '//*[[@id="react-root"]/section'
xpath3 = '//*[@id="react-root"]\section'
从这些 xpath 中,只有 xpath1 是有效的
是否有任何模块或正则表达式可以进行这种验证?
【问题讨论】:
标签:
python
xpath
web-scraping
web-crawler
【解决方案1】:
您可以使用lxml.etree.XPath 编译 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
【解决方案2】:
from selenium import webdriver;
webdriver.Chrome().find_elements('xpath', '//*[text(),"invalid xpath"]')