python - 正确安排两个for循环的结果

标签 python python-3.x for-loop scrapy yield

正如您将从下面的代码中看到的,我正在使用 Scrapy 抓取一些信息。一切正常,我只是对抓取数据的存储方式不满意。使用当前代码,我得到的结果是并排的“X”列和“Y”列(这很好),但是“U”的结果显示为一行,因为它是从第二个开始运行的环形。所以我想要的是将抓取的数据并排在三列中:X/Y/U。有人可以帮忙吗?提前致谢!

def parse(self, response):
    U = []
    for l in response.css('div.property-info-wrapper'):
        yield {
            'X': l.css('span.info-price::text').extract_first(),
            'Y': l.css('li::text').extract_first(),
        }

    for i in response.selector.xpath('//div[@class="property-info-location ellipsis-element-control"]/text()').extract():
        U.append(i)
    yield {'U':U}

最佳答案

您可以使用 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) : 创建一个迭代器,聚合来自每个可迭代对象的元素。如果可迭代对象的长度不均匀,则缺失值将用 fillvalue 填充。迭代一直持续到最长的迭代耗尽。

关于python - 正确安排两个for循环的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50313185/

相关文章:

python - 如果变量包含的只是数字,如何知道变量是分类变量还是数值变量?

python - pyodbc sql 包含 0 个参数标记,但提供了 1 个参数' 'hy000'

python - 使用单个 PYD 文件创建 Python 包

python-3.x - 为什么两个 DataFrame 在使用 `=` 时会被链接?

ios - 如何在 Swift 中指示 for 循环的键是 NSString?

c++ - 是否有更好的方法来对 unordered_multimap 键进行平均?

ios - 始终保存最后一个对象

Python 函数不打印 - 仅存储

python - 什么时候全局安装外部Python包,什么时候本地安装? pip 还是系统包管理器?

Python 3.4 我正在尝试向匿名代理 zend2.com 发送发布请求。但我只是得到他们的主页作为回应