如何在Scrapy项目目录外运行爬虫并解决items导入报错问题
解决方案
1. 非项目目录下通过run.py启动Scrapy爬虫
你需要在启动脚本中显式指定项目配置路径,并将Scrapy项目目录加入Python模块搜索路径,避免Scrapy找不到配置和爬虫类。
在workspace/run.py中写入以下代码:
import sys import os from pathlib import Path from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings # 将scrapy项目根目录加入Python模块搜索路径 PROJECT_ROOT = Path(__file__).parent / "scrapy_project" sys.path.append(str(PROJECT_ROOT)) # 指定Scrapy配置文件的模块路径 os.environ["SCRAPY_SETTINGS_MODULE"] = "project_name.settings" if __name__ == "__main__": process = CrawlerProcess(get_project_settings()) # 替换为你实际定义的爬虫name参数值 process.crawl("spidername") process.start()
注意scrapy_project目录下需要存在标准Scrapy项目的scrapy.cfg配置文件,和project_name目录同级,文件内容如下即可:
[settings] default = project_name.settings [deploy] project = project_name
2. 解决myspider.py导入items.py报错问题
不要使用scrapy_project.project_name.items这种跨外层目录的导入路径,Scrapy加载爬虫时默认以project_name作为顶层包路径,使用以下两种导入方式即可:
- 方式一:相对导入(最稳定,不受启动路径影响)
在myspider.py中使用相对路径导入上级目录的items模块:
import scrapy # 两个点代表当前文件的上级目录(即project_name目录) from ..items import YourCustomItemClass
- 方式二:绝对导入
如果前面run.py已经正确将scrapy_project加入搜索路径,也可以直接从项目顶层模块导入:
import scrapy from project_name.items import YourCustomItemClass
目录校验
确保补全必要文件后,完整目录结构如下,所有__init__.py为Scrapy自动生成的包标识文件,不要误删:
workspace ├─ scrapy_project │ ├─ scrapy.cfg │ ├─ project_name │ ├─ __init__.py │ ├─ spiders │ │ ├─ __init__.py │ │ └─ myspider.py │ ├─ items.py │ └─ settings.py └─ run.py
完成以上配置后,直接在workspace目录执行python run.py即可正常启动爬虫,不会出现导入错误。
内容的提问来源于stack exchange,提问作者user15217679
相关产品推荐
相关产品推荐

