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

如何通过Scrapy Feed自动导出CSV文件 遇ReactorNotRestartable错误如何解决

问题解决方法

1. 首先修正代码中的配置笔误

你当前代码里的自定义配置属性名写错了,Scrapy规定的爬虫级自定义配置属性是custom_settings(末尾带s),你写成了custom_setting,导致FEEDS配置完全不生效:

# 修改前
custom_setting = {'FEEDS': {'/Users/aleja/Documentos OneDrive/items.csv':{'format': 'csv'}}}
# 修改后
custom_settings = {'FEEDS': {'/Users/aleja/Documentos OneDrive/items.csv':{'format': 'csv'}}}

如果路径带空格解析异常,可以临时换成无空格的本地路径测试,确认配置生效后再改回目标路径。

2. 修复ReactorNotRestartable错误

这个错误是Twisted框架的反应器机制导致的,本质原因是你在同一个Python进程中尝试多次启动Scrapy爬虫:

  • 优先用Scrapy标准命令行启动爬虫:直接在项目根目录执行scrapy crawl idealista,不要自己额外写Python脚本重复调用爬虫,命令行默认启动逻辑不会触发该错误。
  • 如果确实需要自定义脚本启动爬虫,保证CrawlerProcess.start()方法在整个进程中只执行一次,不要放在循环中多次调用,正确示例如下:
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from your_spider_module import IdealistaSpider

if __name__ == "__main__":
    process = CrawlerProcess(get_project_settings())
    process.crawl(IdealistaSpider)
    process.start() # 全局仅执行一次

3. 额外修复解析逻辑的潜在问题

你当前解析每个房产条目时用的XPath以//开头,会从整个页面根节点搜索内容,导致每个条目的字段都会重复匹配全页的所有数据,需要改为以.//开头,表示从当前节点下搜索:

# 示例修改,所有同类XPath都做对应调整
items['title'] = sel.xpath('.//a[@role="heading"]/@title').extract()
items['price'] = sel.xpath('.//div/span[@class="item-price h2-simulated"]/text()').extract()

内容的提问来源于stack exchange,提问作者Alejandro Ueno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:36:03