• 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>
    
  • 相关阅读:
    自调用匿名函数和js的Module模式
    设置一天中不同时段的倒计时,计算时针和分针的夹角
    移动端web开发中对点透的处理,以及理解fastclick如何做到去除300ms延迟
    使用Fiddler改变线上js文件的引用路径
    Linux下常用设置文件和文件夹读写权限操作
    RESTful API
    mysql之load语句
    Django学习之点赞功能
    Django学习之网站图标
    python学习之pyenv
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537800.html
Copyright © 2020-2023  润新知