从脚本运行Scrapy时自定义Item导入报错问题求助
问题背景
- 需求:参照Scrapy官方文档
CrawlerProcess相关说明,通过独立脚本批量启动多个Scrapy爬虫,过程中需要复用爬虫脚本上级目录中通过scrapy.Field定义的自定义Item类。 - 故障出现流程:
- 首次运行时使用常规导入语句加载Item类,直接触发导入报错
- 参考网络资料改用相对导入写法尝试修复,反而触发了新的导入异常
- 参考附件:
- Scrapy项目目录结构:

- 首次运行导入报错截图:

- 相对导入修复后报错截图:

- Scrapy项目目录结构:
故障根因
这类导入报错和Scrapy框架本身无关,是Python默认的模块搜索规则和脚本启动位置不匹配导致的:
- 直接运行存放在
spiders目录下的启动脚本时,Python只会把脚本所在的spiders目录加入模块搜索路径sys.path,项目根目录不在搜索范围内,常规导入自然找不到上层目录的items.py模块 - Python本身不允许在直接运行的顶级脚本中使用相对导入(即
from ..xxx import xxx这类带点号的导入写法),只要脚本是作为入口直接运行,没有被包结构识别为内部模块,用相对导入就一定会触发“attempted relative import with no known parent package”错误。
解决思路
按落地成本和稳定性排序,三个方案可直接选用:
方案1:调整启动脚本位置(最推荐,符合官方最佳实践)
不要把批量启动脚本放在spiders目录内,移动到和scrapy.cfg同级的项目根目录下,完全规避路径解析问题:
- 将启动脚本移至项目根目录,与存放
settings.py、items.py的项目内层文件夹保持同级 - 脚本内导入写法参考如下:
from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings # 按项目模块路径正常导入Item和对应爬虫即可 from 你的项目内层文件夹名.items import 自定义的Item类名 from 你的项目内层文件夹名.spiders.爬虫1文件名 import 爬虫1类名 from 你的项目内层文件夹名.spiders.爬虫2文件名 import 爬虫2类名 if __name__ == "__main__": # 自动加载项目的scrapy配置 process = CrawlerProcess(get_project_settings()) process.crawl(爬虫1类名) process.crawl(爬虫2类名) process.start()
- 直接在项目根目录下运行该脚本即可,不需要额外做任何路径配置,所有导入逻辑和Scrapy默认运行环境完全一致。
方案2:手动注入项目路径(适配必须将脚本放在spiders目录的场景)
如果有特殊要求必须把启动脚本放在spiders目录下,在所有项目相关导入之前,手动把项目根目录加入Python模块搜索路径即可,不要用相对导入:
- 在脚本最顶部(所有Scrapy、项目模块导入语句之前)添加如下代码:
import sys from pathlib import Path # 把当前脚本的上两级目录(即spiders目录的上级,项目内层根目录)加入模块搜索路径 sys.path.append(str(Path(__file__).resolve().parent.parent))
- 路径注入完成后,直接用
from items import 自定义的Item类名这种绝对导入写法即可,不需要加相对导入的点前缀。
注意:路径注入代码必须放在所有项目模块导入之前执行,顺序错了依然会触发导入报错。
方案3:自定义Scrapy命令启动(稳定性最高)
不用写独立Python脚本启动,在Scrapy项目中自定义批量启动爬虫的命令,通过scrapy 自定义命令名的方式触发运行。这种模式下Scrapy会自动完成所有路径初始化、配置加载工作,不管是绝对导入还是相对导入都能正常运行,不会出现任何路径相关问题。
避坑说明
- 不要在作为入口直接运行的Python脚本中使用相对导入,这是Python解释器的原生限制,没有其他绕开方式
- 不要随意修改Scrapy默认生成的目录结构,默认结构下所有路径解析逻辑都是官方预适配的,私自调整目录层级很容易触发各类无厘头的导入报错
- 如果使用方案2,注意脚本命名不要和Python内置模块、Scrapy模块、项目内模块重名,比如不要把脚本命名为
scrapy.py、items.py,否则会覆盖原有模块导致导入异常。
内容的提问来源于stack exchange,提问作者8885os
相关产品推荐
相关产品推荐

