我有一个非常基本的蜘蛛,遵循入门指南中的说明,但由于某种原因,尝试将我的项目导入我的蜘蛛会返回错误。蜘蛛和物品代码如下所示:
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文件。这里发生了什么?这应该是一个正确运行的例子吗?
答案 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 *