xpath

作者: lifeLL | 来源:发表于2019-06-09 15:10 被阅读0次
    XPath 使用路径表达式在 XML 文档中进行导航
    
    XPath上下文:
    当前节点(./): 
    如./sender表示选择当前节点下的sender节点集合(等同于下面所讲的"特定元素",如:sender)
    父节点(../): 
    如../sender表示选择当前节点的父节点下的sender节点集合
    根元素(/): 
    如/messages表示选择从文档根节点下的messages节点集合.
    根节点(/*): 
    这里的*是代表所有节点,但是根元素只有一个,所以这里表示根节点。/*的返回结果和/messages返回的结果一样都是messages节点。
    递归下降(//): 
    
    XPath中的核心就是节点(Node),定义了7种不同类型的节点: 元素(Element)、属性(Attribute)、文本(Text)、命名空间(Namespace)、处理指令(processing-instruction)、注释(Comment)和文档节点(Document nodes)
    这些节点组成一棵节点树,树的根节点被称为文档节点。
    
    路径表达式:  解释
    /html/body/ul/li    从根节点开始依照路径选取li元素。返回多个。
    //ul/li[1]  还是选取li元素,但是路径多级跳跃到ul/li。[1]表示只取第一个li。
    //li[last()]    还是选取li,但路径更跳跃。[last()]表示取最后一个li元素。
    //li[@class]    选取根节点的名为li且有class属性的所有后代。
    //li[@class=”item”] 选择根节点的名为li且class属性为item的所有后代。
    //body/*/li 选取body的名为li的孙子节点。*是通配符,表示任何节点。
    //li[@*]    选取所有带属性的li元素。
    //body/div | //body/ul  选取body的所有div和ul元素。
    body/div    相对路径,选取当前节点的body元素的子元素div。绝对路径以 / 开始。
    
    Xpath的函数很多,涉及到错误、数值、字符串、时间等等,然而我们从网页中提取数据的时候只会用到很少的一部分。其中最重要的就是字符串相关的函数,比如contains()函数。
    
    contains(a, b)
    
    如果字符串a包含字符串b,则返回true,否则返回false。
    比如: contains(‘猿人学Python’, ‘Python’),返回true
    那么它用在什么时候呢?我们知道,一个html标签的class是可以有多个属性值的,比如:
    
    <div class="post-item text-red text-center">
        ...
    </div>
    这段html中div有三个class值,第一个表面它是一条发布的消息,后面两个是对格式做了更多的设置。如果我们想提取网页中所有发布的消息,只需要匹配到post-item 即可,这时候就可以用上contains了:
    
    doc.xpath('//div[contains(@class, "post-item")]')
    

    相关文章

      网友评论

          本文标题:xpath

          本文链接:https://www.haomeiwen.com/subject/jffnxctx.html