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前缀的形式,或者环境里的默认编码配置出了小问题。
具体解决步骤
我给你几个实用的排查和解决方向:
检查项目settings.py配置
打开你Scrapy项目的settings.py文件,搜索FEED_EXPORT_ENCODING这个配置项。如果发现它是这样写的:FEED_EXPORT_ENCODING = b'utf8'赶紧改成字符串格式:
FEED_EXPORT_ENCODING = 'utf-8'在运行命令里直接指定编码
如果你的项目里没设置这个配置,或者不想改动settings文件,那可以在运行爬虫的时候直接通过参数指定编码:scrapy runspider Intro_Scrapy.py -o video.csv -s FEED_EXPORT_ENCODING=utf-8额外小提醒:优化你的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
相关产品推荐
相关产品推荐

