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

Scrapy爬虫执行crawl命令仅保存一条结果至CSV文件问题求助(附代码)

解决Scrapy爬虫仅保存一条结果到CSV的问题

嘿,我来帮你排查这个问题!结合你给出的代码片段,大概率是以下几个常见原因导致的,咱们一步步来解决:

1. 遗漏了yield语句(最常见的新手坑)

你在循环里创建了QuestionItem对象,但如果没有用yield item把它传递给Scrapy的处理流程,那么只有最后一个item可能被偶然处理,甚至完全不处理。这是最可能导致只输出一条结果的原因。

修正后的parse方法应该是这样的:

def parse(self, response):
    selector_list = response.css('.question-summary')
    for selector in selector_list:
        item = QuestionItem()
        # 补全你的字段提取逻辑,比如问题标题
        item['question'] = selector.css('h3 a::text').get().strip()
        # 示例:提取问题链接
        item['question_link'] = selector.css('h3 a::attr(href)').get()
        # 关键步骤:将item交给Scrapy处理,这样每个item都会被写入CSV
        yield item

2. 字段提取逻辑不完整或出错

你的代码里item['question'] = selector.css('h3 a::t...明显截断了,应该是::text吧?如果选择器写错了,或者提取后没有处理空值(比如某个元素不存在时.get()返回None),可能导致单个item创建失败,但一般不会只输出一条结果。建议给提取结果加上空值判断,比如:

question_text = selector.css('h3 a::text').get()
item['question'] = question_text.strip() if question_text else ''

3. 导出CSV的方式或管道配置问题

如果你是用自定义管道写入CSV,检查管道类里的process_item方法是不是写错了——比如有没有在处理一个item后就return而不是return item,导致后续item无法被处理。

如果你直接用Scrapy自带的导出命令:

scrapy crawl first -o questions.csv

这种方式更可靠,只要你正确yield了每个item,Scrapy会自动把所有结果写入CSV,不需要额外配置管道。

先优先检查yield语句是否存在,这是解决这个问题的核心!如果还有问题,可以再看看选择器是否匹配到了所有目标元素,或者allowed_domains有没有限制到需要的内容。

内容的提问来源于stack exchange,提问作者Sam B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:23:30