Scrapy - xml 抓取中的 xpath 问题

Scrapy - Issue with xpath on an xml crawl

我正在尝试制作一个简单的蜘蛛来抓取一些 xml 并以新格式将其吐出以进行实验。但是,吐出的 xml 中似乎包含额外的代码。我想要的格式是这样的(没有额外的代码或值标签),大致如下:<body>Don't forget me this weekend!</body>

我想我使用的 xpath 有误,但我不确定我做错了什么。

蜘蛛

from scrapy.contrib.spiders import XMLFeedSpider
from crawler.items import CrawlerItem

class SiteSpider(XMLFeedSpider):
    name = 'site'
    allowed_domains = ['www.w3schools.com']
    start_urls = ['http://www.w3schools.com/xml/note.xml']
    itertag = 'note'

    def parse_node(self, response):
        xxs = XmlXPathSelector(response)
        to = xxs.select('//to')
        who = xxs.select('//from')
        heading = xxs.select('//heading')   
        body = xxs.select('//body')           
        return item

输入

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

当前(错误)输出

<?xml version="1.0" encoding="UTF-8"?>
<items>
   <item>
      <body>
         <value>&lt;body&gt;Don't forget me this weekend!&lt;/body&gt;</value>
      </body>
      <to>
         <value>&lt;to&gt;Tove&lt;/to&gt;</value>
      </to>
      <who>
         <value>&lt;from&gt;Jani&lt;/from&gt;</value>
      </who>
      <heading>
         <value>&lt;heading&gt;Reminder&lt;/heading&gt;</value>
      </heading>
   </item>
</items>

parse_node() 的签名不正确。应该有 selector 参数给定,你应该调用 xpath() 方法,例如:

def parse_node(self, response, selector):
    to = selector.xpath('//to/text()').extract()
    who = selector.xpath('//from/text()').extract()
    print to, who

打印:

[u'Tove'] [u'Jani']