【问题标题】:Unable to import Scrapy Spider into Script无法将 Scrapy Spider 导入脚本
【发布时间】:2022-11-17 15:28:13
【问题描述】:

除了将classSomeSpiderspider/src.py导入main/main.py之外,我所有的导入都在工作。当我在终端中调用 scrapy crawl somespider 时,蜘蛛本身就会运行。 python 不能识别 modulesscrapy.spider 吗?

我的文件结构:

/whiskers
-/venv
--/bin
--/include
--/lib
--/whiskers
---/whiskers
----/main
-----/main.py
----/spiders
-----/__init__.py
-----/src.py
----/__init__.py
----/items.py
----/middlewares.py
----/pipelines.py
----/settings.py
---/scrapy.cfg
--/pyvenv.cfg

将其中任何一个放入main/main.py

from whiskers.spiders.src import SomeSpider
   
(or) 

from whiskers.whiskers.spiders.src import SomeSpider

(or) 

from whiskers.venv.whiskers.whiskers.spiders.src import SomeSpider

给出错误:

ModuleNotFoundError: No module named 'whiskers'

尝试:

from ..spiders.src import SomeSpider

(or)

from .. import LawSpider

给出错误:

ImportError: attempted relative import with no known parent package

spider/src.py中,蜘蛛本身只是一个名为SomeSpider的基本scrapy.Spider

class SomeSpider(scrapy.Spider):

【问题讨论】:

    标签: python scrapy python-import


    【解决方案1】:

    将您的 main.py 脚本放在包文件夹之外。包文件夹是包含__init__.py 的文件夹。 Guido van Rossum 对此的想法是,脚本 - 起点,__name__ == '__main__' 的模块 - 不应该驻留里面外部包。包应仅包含导入到脚本或其他包中的库代码。

    在这种情况下,最简单的方法是将 main.py 向上移动两层:

    whiskers/
      venv/
        bin/
        include/
        lib/
        whiskers/
          main.py  <-- put it here
          whiskers/
            __init__.py
            spiders/
              __init__.py
              src.py
            items.py
            middlewares.py
            pipelines.py
            settings.py
          scrapy.cfg
        pyvenv.cfg
    

    然后在 main.py 中执行from whiskers.spiders.src import SomeSpider

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 2019-12-10
      • 2015-10-10
      • 2014-03-18
      • 2015-04-26
      • 1970-01-01
      • 2015-09-13
      相关资源
      最近更新 更多