我有一个非常基本的蜘蛛,按照入门指南中的说明进行操作,但由于某种原因,尝试将我的项目导入我的蜘蛛会返回错误。蜘蛛和物品代码如下所示:
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 要么找不到我的蜘蛛,要么无法导入我的项目文件。这是怎么回事?这应该是一个真正可以运行的例子吧?
我在与
scrapy
合作时也遇到过几次这样的情况。您可以在 Python 模块的开头添加这一行:
from __future__ import absolute_import
更多信息在这里:
您正在导入一个字段,您必须从 items.py 导入一个类 就像 from myproject.items import class_name.
所以,这是我前几天遇到的一个问题,我能够通过一些尝试和错误来解决,但我找不到任何相关文档,所以我想我会把它贴出来以防万一有人碰巧遇到了我遇到的同样的问题。
这与其说是 scrapy 的问题,不如说是命名文件以及 python 如何处理导入模块的问题。基本上问题是,如果您将蜘蛛文件命名为与项目相同的名称,那么您的导入将会中断。 Python 将尝试从最接近当前位置的目录导入,这意味着它将尝试从蜘蛛的目录导入,但这是行不通的。
基本上只需将蜘蛛文件的名称更改为其他名称,一切都会正常运行。
如果结构是这样的:
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 *
您的项目结构似乎有一个根文件夹(包),因此您需要按如下方式导入它: 从 myProject.package.items 导入项目