Scrapy - 在xml爬网上使用xpath问题

时间:2015-04-24 21:15:11

标签: python xml xpath scrapy scrapy-spider

我试图制作一个简单的蜘蛛来抓取一些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>

Curreont(错误)输出

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

1 个答案:

答案 0 :(得分:1)

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']