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><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>
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']
我正在尝试制作一个简单的蜘蛛来抓取一些 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><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>
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']