Python中scrapy没有在main目录下运行报错如何解决?

spider main.py scrapy.cfg
shenjianlin@newdev:~/my_project/Espider(shenwei/spider_12_13)$ cd …
shenjianlin@newdev:~/my_project(shenwei/spider_12_13)$ /usr/bin/python3 /home/shenjianlin/my_project/Espider/main.py traveldaily
Scrapy 1.5.0 - no active project

Unknown command: crawl

Use “scrapy” to see available commands

我没有在 spider 目录下运行,我是在任意目录运行的这个命令
/usr/bin/python3 /home/shenjianlin/my_project/Espider/main.py traveldaily

运行这个就是报错,求人指教这是为啥?

因为我要在服务器上面配置,所以这样配的话就会报错?
Python中scrapy没有在main目录下运行报错如何解决?


7 回复

这个报错通常是因为Scrapy项目结构导致的。你得在正确的目录层级下运行命令。

核心原因:Scrapy需要从项目根目录(包含scrapy.cfg文件的那个目录)运行,这样它才能正确识别项目配置和模块路径。

解决方案

  1. 检查当前目录:确保你在包含scrapy.cfg文件的目录下执行命令。比如你的项目结构是这样的:

    myproject/
    ├── scrapy.cfg
    └── myproject/
        ├── __init__.py
        ├── items.py
        ├── middlewares.py
        ├── pipelines.py
        ├── settings.py
        └── spiders/
            └── __init__.py
    

    你应该在myproject/(第一层)运行scrapy crawl spider_name

  2. 使用绝对路径:如果必须在其他目录运行,可以这样:

    import sys
    import os
    from scrapy.crawler import CrawlerProcess
    from scrapy.utils.project import get_project_settings
    
    # 添加项目根目录到Python路径
    project_path = '/path/to/your/project'
    sys.path.append(project_path)
    os.chdir(project_path)
    
    # 加载项目设置
    os.environ['SCRAPY_SETTINGS_MODULE'] = 'myproject.settings'
    settings = get_project_settings()
    
    # 导入并运行你的爬虫
    from myproject.spiders.your_spider import YourSpiderClass
    process = CrawlerProcess(settings)
    process.crawl(YourSpiderClass)
    process.start()
    
  3. 创建运行脚本:在项目根目录创建一个run.py

    from scrapy.crawler import CrawlerProcess
    from scrapy.utils.project import get_project_settings
    from myproject.spiders.your_spider import YourSpiderClass
    
    process = CrawlerProcess(get_project_settings())
    process.crawl(YourSpiderClass)
    process.start()
    

    然后直接运行python run.py

一句话建议:确保在scrapy.cfg所在目录运行命令,或者用Python脚本明确指定项目路径。


忍不住补充一下,为什么不去 scrapy.cfg 所在目录运行,why?why?why?

我要在服务器上面配置啊,你这个 scrapy list 是在 scrapy.cfg 目录运行?

就是别人写好了一个东西,我要在服务器上面部署,直接绝对路径如何运行成功

scrapy list scrapy crawl spidername

  1. cd 到当前目录可以运行;
    2. scrapy crawl spidername ----> scrpay 的路径(比如 /usr/bin/scrapy ) crawl spidername

两种方式试一下。

回到顶部