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.
相关产品推荐
相关产品推荐

