我试图制作一个简单的蜘蛛来抓取一些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><body>Don't forget me this weekend!</body></value>
</body>
<to>
<value><to>Tove</to></value>
</to>
<who>
<value><from>Jani</from></value>
</who>
<heading>
<value><heading>Reminder</heading></value>
</heading>
</item>
</items>
答案 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']