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

Scrapy导出CSV时所有数据合并为单行的问题排查求助

问题原因与解决方法

你的问题根源在于一次性把整页的所有商品数据(列表形式)塞进了一个Item里,然后只yield一次,所以导出时所有数据会被合并到一行。正确的做法是遍历每个商品条目,为每个商品单独生成一个Item。

修正后的代码

import scrapy
from ..items import AmazondawinItem

class AmazonspiderSpider(scrapy.Spider):
    name = 'amazon'
    pagenumber = 3
    allowed_domains = ['amazon.com']
    start_urls = [
        'https://www.amazon.com/s?k=laptop&i=computers&crid=27GFGJVF4KNRP&sprefix=%2Ccomputers%2C725&ref=nb_sb_ss_recent_1_0_recent'
    ]

    def parse(self, response):
        # 定位每个商品的容器节点(亚马逊搜索页的商品容器选择器)
        product_containers = response.css('.s-result-item[data-component-type="s-search-result"]')
        
        for container in product_containers:
            item = AmazondawinItem()
            
            # 提取单个商品的名称
            item['name'] = container.css('.a-size-medium::text').extract_first(default='')
            # 提取单个商品的原价
            item['old_price'] = container.css('.a-spacing-top-micro .a-text-price span::text').extract_first(default='')
            # 提取单个商品的现价
            item['price'] = container.css('.a-spacing-top-micro .a-price-whole::text').extract_first(default='')
            # 提取单个商品的评论数
            item['review'] = container.css('.s-link-style .s-underline-text::text').extract_first(default='')
            # 提取单个商品的图片链接
            item['imagelink'] = container.css('.s-image::attr(src)').extract_first(default='')
            
            yield item

关键改动说明

  • 遍历商品容器:先找到页面中每个商品的独立容器节点,循环处理每个商品,确保每个Item对应一个商品。
  • 使用extract_first()替代extract():extract()返回匹配到的所有结果列表,而extract_first()只返回第一个匹配结果(或者指定的默认值),这样每个字段都是单个字符串,符合CSV单行单条数据的要求。
  • 移除无用的try-except:extract()和extract_first()不会抛出异常,找不到匹配结果时extract()返回空列表,extract_first()返回None(或指定的default值),所以原来的try-except块完全没必要。

现在导出CSV时,每个商品的数据会单独占一行,不会再出现所有数据合并到同一行的问题。

内容的提问来源于stack exchange,提问作者Mathematics physics Biology

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:15:51