您可以使用
itertools.zip_longest
将两个结果压缩在一起,并根据它们的真值生成它们
*
。
from itertools import zip_longest
def parse(self, response):
locations = response.selector.xpath('//div[@class="property-info-location ellipsis-element-control"]/text()').extract()
css = response.css('div.property-info-wrapper')
for loc, c in zip_longest(css, locations):
if loc:
yield {
'X': loc.css('span.info-price::text').extract_first(),
'Y': loc.css('li::text').extract_first(),
}
if c:
yield {'U': c} # since spider needs to return dict
*
itertools.zip_longest(*iterables, fillvalue=None)
:
制作一个迭代器,聚合来自每个iterables的元素。如果iterables的长度不均匀,则缺少的值将用fillvalue填充。迭代将继续,直到最长的iterable耗尽。