我遇到了一个问题。我正在抓取的网站 xml 有一些为空的值,但我需要保留这些值的顺序。
样本:
<thedata>
<some-item>
<value xsi:nil="true"/>
<value xsi:nil="true"/>
<value xsi:nil="true"/>
<value xsi:nil="true"/>
<value xsi:nil="true"/>
<value>44</value>
<value>32</value>
<value>31</value>
<value xsi:nil="true"/>
<value xsi:nil="true"/>
<value>32</value>
<value>31</value>
<value>34</value>
<value>34</value>
<value>33</value>
</some-item>
</thedata>
这样做text()
会忽略空值:
class MySpider(XMLFeedSpider):
name = 'myspider'
start_urls = ['http://www.example.com/somexml.xml']
itertag = 'thedata'
# Using XMLFeedSpider
def parse_node(self, response, node):
item_vals = node.select('some-item/value/text()').extract()
print item_vals
这将打印一个列表,其中仅包含具有整数的值。
由于我需要保留顺序,有没有办法告诉scrapy用''
or替换任何空值None
?
编辑:@unutbu:我仍然遇到同样的问题:
item_vals = node.select('some-item/value/text()').extract()
print item_vals
item_vals2 = node.select('some-item/value/text()').extract() or None
print item_vals2
输出:
[u'44',u'32',u'31',u'32',u'31',u'34',u'34',u'33']
[u'44',u'32',u'31',u'32',u'31',u'34',u'34',u'33']
我想要的是:
[None,None,None,None,None,u'44',u'32',u'31',None,None,u'32',u'31',u'34',u'34',u'33']
或者遇到时表示空值的东西。