在作一个可视化配置爬虫项目时,须要配置爬虫的用户本身输入xpath和csspath路径以提取数据或作浏览器操做。考虑到用户的有时会输入错误的xpath或csspath路径,后台须要对其作合法性校验。css
对于xpath的有效性检验,使用第三方lxml模块中的etree.XPathEvalError进行校验。不得不说lxml是一个解析爬虫数据的利器,当etree.xpath()遇到不合法的xpath路径时会抛出XPathEvalError错误。python
代码以下:浏览器
from lxml import etree from StringIO import StringIO def _validXpathExpression(xpath): """ 检查xpath合法性 :param xpath: :return: """ tree = etree.parse(StringIO('<foo><bar></bar></foo>')) try: tree.xpath(xpath) return True except etree.XPathEvalError, e: return False
只有当输入的xpath路径合法时返回True。 验证:spa
>>>print _validXpathExpression('./div[@class="name"]/a/text()') >>>True >>> >>>print _validXpathExpression('./div(@class="name")') >>>False
对于csspath检验的思路时,借助python标准库cssselect的css_to_xpath()方法。当输入的csspath不合法时会抛出SelectorError错误。code
代码以下:xml
from cssselect.parser import SelectorError from cssselect.xpath import HTMLTranslator def _validCssExpression(css): """ 检查css合法性 :param css: :return: """ try: HTMLTranslator().css_to_xpath(css) return True except SelectorError, e: return False
只有当输入的csspath路径合法时返回True。 验证:io
>>>print _validCssExpression('.content>a') >>>True >>> >>>print _validCssExpression('.content>a[123]') >>>False