You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何整理Scrapy双层循环爬取结果,实现X/Y/U三列数据并列存储

解决Scrapy爬取数据格式不匹配的问题

嘿,我来帮你搞定这个数据格式的问题!咱们先捋清楚当前代码的问题:你现在是先循环每个property-info-wrapper节点,分别输出X和Y的条目,之后又单独输出整个U的列表——这就导致X/Y是一条条独立的数据,而U是单独的一行,自然没法形成X/Y/U三列并列的结构。

要实现三列并列,核心是把每个X/Y条目和对应的U值绑定在一起,然后作为一条数据输出。咱们可以这么改:

修改后的代码

def parse(self, response):
    # 先获取所有U的数据,存成列表
    u_list = response.selector.xpath('//div[@class="property-info-location ellipsis-element-control"]/text()').extract()
    # 遍历每个property-info-wrapper,同时拿到索引,用来匹配对应的U值
    for idx, l in enumerate(response.css('div.property-info-wrapper')):
        # 处理U列表长度不够的情况,避免索引越界
        u_value = u_list[idx].strip() if idx < len(u_list) else None
        yield {
            'X': l.css('span.info-price::text').extract_first(default='').strip(),
            'Y': l.css('li::text').extract_first(default='').strip(),
            'U': u_value
        }

代码说明

  • 首先提前把所有U的数据提取到u_list里,这样后续可以按索引匹配每个条目对应的U值;
  • 用enumerate遍历property-info-wrapper,拿到每个节点的索引idx,这样就能从u_list里取出对应的U值;
  • 加了strip()处理文本的空格,还有default=''避免提取到None的情况,同时处理了U列表长度和X/Y条目数不一致的边界问题(如果U的数量少,超出的条目U值设为None);
  • 现在每次yield的都是包含X/Y/U的完整字典,输出的每条数据就是三列并列的格式啦!

内容的提问来源于stack exchange,提问作者fg42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:20:28