zoukankan      html  css  js  c++  java
  • xpath选择器

    # encoding: UTF-8
    
    # 从根结点中选取数据                                        /
    # 从匹配选择的当前结点选择文档中的结点,不考虑它们的位置        //
    # 选取当前结点                                            .
    # 选取当前节点的父节点                                    ..
    # 选取属性                                               @
    # 匹配任何元素节点                                        *
    # 匹配任何属性节点                                        @*
    # 匹配任何类型的节点                                      Node()
    
    from scrapy.selector import Selector
    
    with open('.superHero.xml','r') as fp:
        body = fp.read()
    
        print u'全部的数据:'
        print Selector(text=body).xpath('/*').extract()
    
        print u'采集superHero.xml中第一个class中的birthday中的内容:'
        print Selector(text=body).xpath('/html/body/superhero/class[1]/birthday').extract()
    
        print u'采集superoHero.xml中最后一个class中的birthday中的内容:'
        print Selector(text=body).xpath('/html/body/superhero/class[last()]/birthday').extract()
    
        print u'采集superHero.xml 中的到数第二个class中的birthday中的内容:'
        print Selector(text=body).xpath('/html/body/superhero/class[last()-1]/birthday').extract()
    
        print u'采集superHero.xml 中name属性为en的数据:'
        print Selector(text=body).xpath('/html/body/superhero//name[@lang="en"]').extract()
    
        print u'采集superHero.xml 中到数第二个class的name结点的文本:'
        print Selector(text=body).xpath('/html/body/superhero/class[last()-1]/name/text()').extract()
    
        print u'以下是嵌套选择器'
        print u'选取第二class中的name属性的内容:'
        subSector = Selector(text=body).xpath('/html/body/superhero/class').extract()
        print subSector
        # 注, 采用嵌套选择器时,前面有html/body选项
        print Selector(text=subSector[2]).xpath('/html/body/class/name/text()').extract()
        print Selector(text=subSector[2]).xpath('//class/name/text()').extract()
    
    

    运行结果

    全部的数据:
    [u'
    	
    	
    		
    			Tony Stark 
    			Iron Man 
    			male 
    			1969 
    			47 
    		
    		
    			Peter BenJamin Parker 
    			Spider Man 
    			male 
    			unknow 
    			unknow 
    		
    		
    			Steven Rogers 
    			Caption America 
    			male 
    			19200704 
    			96 
    		
    		
    	
    ']
    采集superHero.xml中第一个class中的birthday中的内容:
    [u'1969 ']
    采集superoHero.xml中最后一个class中的birthday中的内容:
    [u'19200704 ']
    采集superHero.xml 中的到数第二个class中的birthday中的内容:
    [u'unknow ']
    采集superHero.xml 中name属性为en的数据:
    [u'Tony Stark ', u'Peter BenJamin Parker ']
    采集superHero.xml 中到数第二个class的name结点的文本:
    [u'Peter BenJamin Parker ']
    以下是嵌套选择器
    选取第二class中的name属性的内容:
    [u'
    			Tony Stark 
    			Iron Man 
    			male 
    			1969 
    			47 
    		', u'
    			Peter BenJamin Parker 
    			Spider Man 
    			male 
    			unknow 
    			unknow 
    		', u'
    			Steven Rogers 
    			Caption America 
    			male 
    			19200704 
    			96 
    		']
    [u'Steven Rogers ']
    [u'Steven Rogers ']
    

    superHero.xml

    <html>
    	<body>
    	<superhero>
    		<class>
    			<name lang="en">Tony Stark </name>
    			<alias>Iron Man </alias>
    			<sex>male </sex>
    			<birthday>1969 </birthday>
    			<age>47 </age>
    		</class>
    		<class>
    			<name lang="en">Peter BenJamin Parker </name>
    			<alias>Spider Man </alias>
    			<sex>male </sex>
    			<birthday>unknow </birthday>
    			<age>unknow </age>
    		</class>
    		<class>
    			<name lang="ch">Steven Rogers </name>
    			<alias>Caption America </alias>
    			<sex>male </sex>
    			<birthday>19200704 </birthday>
    			<age>96 </age>
    		</class>
    		</superhero>
    	</body>
    </html>
    
  • 相关阅读:
    教你透彻了解红黑树(转)
    算法描述伪代码
    B 树、B+ 树、B* 树
    Java四种引用类型
    Java程序以后台方式在Linux上运行(nohup命令)
    java 文档注释
    Reactor模式和NIO
    Immutable模式与string类的实现
    mina 入门
    索引和优化查询
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537800.html
Copyright © 2011-2022 走看看