如何通过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
相关产品推荐
相关产品推荐

