# 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>