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

Scrapy导出CSV时出现LookupError: unknown encoding: 'b'utf8''错误求助

Scrapy导出CSV时出现LookupError: unknown encoding: 'b'utf8''错误求助

嘿,我完全懂你现在的困扰——用Scrapy爬Stack Overflow的问题,结果导出的CSV是空的,还弹出了LookupError: unknown encoding: 'b'utf8''这个报错,咱们一步步来解决它!

先搞懂错误根源

这个错误的核心是编码参数被错误地指定成了字节类型的b'utf8',而Scrapy需要的是字符串格式的编码名称(比如'utf-8'或者'utf8')。大概率是你在某个配置里不小心把编码写成了带b前缀的形式,或者环境里的默认编码配置出了小问题。

具体解决步骤

我给你几个实用的排查和解决方向:

  1. 检查项目settings.py配置
    打开你Scrapy项目的settings.py文件,搜索FEED_EXPORT_ENCODING这个配置项。如果发现它是这样写的:

    FEED_EXPORT_ENCODING = b'utf8'
    

    赶紧改成字符串格式:

    FEED_EXPORT_ENCODING = 'utf-8'
    
  2. 在运行命令里直接指定编码
    如果你的项目里没设置这个配置,或者不想改动settings文件,那可以在运行爬虫的时候直接通过参数指定编码:

    scrapy runspider Intro_Scrapy.py -o video.csv -s FEED_EXPORT_ENCODING=utf-8
    
  3. 额外小提醒:优化你的id字段
    看了你的代码,发现item.add_value('id', 1)会让所有爬取到的问题id都是1,要是需要每个问题有唯一标识,可以在parse方法里加个计数器:

    def parse(self, response):
        sel = Selector(response)
        preguntas = sel.xpath("//div[contains(@id,'questions')]//div[@class='s-post-summary js-post-summary']")
        count = 1  # 初始化计数器
        for pregunta in preguntas:
            item = ItemLoader(item = Pregunta(), selector = pregunta)
            item.add_xpath('pregunta','.//h3/a/text()')
            item.add_xpath('descripcion',".//div[contains(@class,'excerpt')]/text()")
            item.add_value('id', count)
            count +=1  # 每次循环自增
            yield item.load_item()
    

附上你提供的报错和代码参考

报错信息:

2025-03-16 12:07:52 [scrapy.core.scraper] ERROR: Spider error processing <GET https://stackoverflow.com/questions> (referer: None)
Traceback (most recent call last):
  File "C:\Users\fvarelaa\AppData\Local\anaconda3\Lib\site-packages\scrapy\utils\defer.py", line 327, in iter_errback
    yield next(it)
          ^^^^^^^^

LookupError: unknown encoding: 'b'utf8''
2025-03-16 12:07:52 [scrapy.core.engine] INFO: Closing spider (finished)
2025-03-16 12:07:52 [scrapy.extensions.feedexport] INFO: Stored csv feed (0 items) in: video.csv
2025-03-16 12:07:52 [scrapy.statscollectors] INFO: Dumping Scrapy stats:

你的爬虫代码:

from scrapy.item import Field
from scrapy.item import Item
from scrapy.spiders import Spider
from scrapy.selector import Selector
from scrapy.loader import ItemLoader

class Pregunta(Item):
    id = Field()
    pregunta = Field()
    descripcion = Field()

class StackOverFlowSpider(Spider):
    name = "MiPrimerSpider"
    custom_settings = {
        "USER_AGENT": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    }

    start_urls = ["https://stackoverflow.com/questions"]

    def parse(self, response):
        sel = Selector(response)
        preguntas = sel.xpath("//div[contains(@id,'questions')]//div[@class='s-post-summary js-post-summary']")

        for pregunta in preguntas:
            item = ItemLoader(item = Pregunta(), selector = pregunta)
            item.add_xpath('pregunta','.//h3/a/text()')
            item.add_xpath('descripcion',".//div[contains(@class,'excerpt')]/text()")
            item.add_value('id', 1)

            yield item.load_item()
# scrapy runspider Intro_Scrapy.py -o video.csv

备注:内容来源于stack exchange,提问作者Francisco Augusto Varela Aguir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:13:11