歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python檢查xpath和csspath表達式是否合法

Python檢查xpath和csspath表達式是否合法

日期:2017/3/1 9:08:51   编辑:Linux編程

在做一個可視化配置爬蟲項目時,需要配置爬蟲的用戶自己輸入xpath和csspath路徑以提取數據或做浏覽器操作。考慮到用戶的有時會輸入錯誤的xpath或csspath路徑,後台需要對其做合法性校驗。

xpath有效性校驗

對於xpath的有效性檢驗,使用第三方lxml模塊中的etree.XPathEvalError進行校驗。不得不說lxml是一個解析爬蟲數據的利器,當etree.xpath()遇到不合法的xpath路徑時會拋出XPathEvalError錯誤。

代碼如下:

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。
驗證:

>>>print _validXpathExpression('./div[@class="name"]/a/text()')
>>>True
>>>
>>>print _validXpathExpression('./div(@class="name")')
>>>False

csspath有效性檢驗

對於csspath檢驗的思路時,借助python標准庫cssselect的css_to_xpath()方法。當輸入的csspath不合法時會拋出SelectorError錯誤。

代碼如下:

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。
驗證:

>>>print _validCssExpression('.content>a')
>>>True
>>>
>>>print _validCssExpression('.content>a[123]')
>>>False

Copyright © Linux教程網 All Rights Reserved