无法在scrapy中导入项目

时间:2013-04-13 18:23:48

标签: python module web-scraping scrapy

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

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要么找不到我的蜘蛛,要么无法导入我的items文件。这里发生了什么?这应该是一个正确运行的例子吗?

4 个答案:

答案 0 :(得分:5)

在使用scrapy时,我也多次这样做过。您可以在Python模块的开头添加以下行:

from __future__ import absolute_import

更多信息:

答案 1 :(得分:3)

所以,这是我前几天遇到的一个问题,我能通过一些试验和错误修复,但我无法找到任何文档,所以我想我会把它放进去如果有人碰巧遇到了我所做的同样的问题。

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

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

答案 2 :(得分:3)

您要导入字段,必须从items.py导入一个类 例如从myproject.items导入 class_name

答案 3 :(得分:1)

如果结构如下:

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 Imports: Multi-Line and Absolute/Relative