4

我有一个非常基本的蜘蛛,按照入门指南中的说明进行操作,但由于某种原因,尝试将我的项目导入我的蜘蛛会返回错误。蜘蛛和项目代码如下所示:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

from myProject.items import item

class MyProject(BaseSpider):
    name = "spider"
    allowed_domains = ["website.com"]
    start_urls = [
        "website.com/start"
    ]

    def parse(self, response):
        print response.body

from scrapy.item import Item, Field

class ProjectItem(Item):
    title = Field()

当我运行此代码时,scrapy 要么找不到我的蜘蛛,要么无法导入我的项目文件。这里发生了什么?这应该是一个运行正确的例子吗?

4

4 回答 4

6

我在使用scrapy. 您可以在 Python 模块的开头添加这一行:

from __future__ import absolute_import

更多信息在这里:

于 2013-04-14T11:41:58.977 回答
4

所以,这是我前几天遇到的一个问题,我能够通过一些试验和错误来解决,但我找不到任何文档,所以我想我会提出这个问题,以防万一遇到和我一样的问题。

这不是scrapy的问题,而是命名文件以及python如何处理导入模块的问题。基本上问题是,如果您将蜘蛛文件命名为与项目相同的名称,那么您的导入将会中断。Python 将尝试从最接近您当前位置的目录导入,这意味着它将尝试从无法工作的蜘蛛目录中导入。

基本上只需将您的蜘蛛文件的名称更改为其他名称,它就会正常运行。

于 2013-04-13T18:23:48.080 回答
4

您正在导入一个字段,您必须从 items.py 导入一个类,例如 from myproject.items import class_name

于 2014-02-24T05:32:49.080 回答
2

如果结构是这样的:

package/
    __init__.py
    subpackage1/
        __init__.py
        moduleX.py
        moduleY.py
    subpackage2/
        __init__.py
        moduleZ.py
    moduleA.py

如果你在moduleX.py中,导入其他模块的方式可以是:

from .moduleY.py import *

from ..moduleA.py import *

from ..subpackage2.moduleZ.py import *

请参阅:PEP 导入:多行和绝对/相对

于 2016-08-18T08:42:49.913 回答