ImportError:没有名为[name] .items

时间:2017-09-10 01:36:39

标签: python-2.7 scrapy miniconda

我正在尝试运行自己的scrapy项目。我以为我在这里发布的帖子中解决了相关问题:[urlparse: ModuleNotFoundError, presumably in Python2.7 and under conda

我做了完整的系统映像还原并简单地安装了Python 2.7和Miniconda。但是,Atom编辑器仍在标记/强调“导入urlparse”#。

代码基于一本写得很好的书,作者提供了一个很棒的VM游乐场来运行本书中的脚本。在VM中,代码工作正常。

但是,为了尝试自己练习,我现在收到以下错误:

(p2env) C:\Users\User-1\Desktop\scrapy_projects\dictionary>scrapy crawl basic Traceback (most recent call last): File "C:\Users\User-1\Miniconda2\envs\p2env\Scripts\scrapy-script.py", line 5, in <module> sys.exit(scrapy.cmdline.execute()) File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\cmdline.py", line 148, in execute cmd.crawler_process = CrawlerProcess(settings) File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\crawler.py", line 243, in __init__ super(CrawlerProcess, self).__init__(settings) File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\crawler.py", line 134, in __init__ self.spider_loader = _get_spider_loader(settings) File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\crawler.py", line 330, in _get_spider_loader return loader_cls.from_settings(settings.frozencopy()) File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\spiderloader.py", line 61, in from_settings return cls(settings) File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\spiderloader.py", line 25, in __init__ self._load_all_spiders() File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\spiderloader.py", line 47, in _load_all_spiders for module in walk_modules(name): File "C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\utils\misc.py", line 71, in walk_modules submod = import_module(fullpath) File "C:\Users\User-1\Miniconda2\envs\p2env\lib\importlib\__init__.py", line 37, in import_module __import__(name) File "C:\Users\User-1\Desktop\scrapy_projects\dictionary\dictionary\spiders\basic.py", line 11, in <module> from terms.items import TermsItem ImportError: No module named terms.items

我的文件夹层次结构如下:

└───dictionary
│   scrapy.cfg
│
└───dictionary
    │   items.py
    │   middlewares.py
    │   pipelines.py
    │   settings.py
    │   settings.pyc
    │   __init__.py
    │   __init__.pyc
    │
    └───spiders
            basic.py
            basic.pyc
            __init__.py
            __init__.pyc

我的items.py代码如下:

# -*- coding: utf-8 -*-

from scrapy.item import Item, Field


class TermsItem(Item):
    # Primary fields
    title = Field()
    definition = Field()
    # Housekeeping fields
    url = Field()
    project = Field()
    spider = Field()
    server = Field()
    date = Field()

我的spider.py如下:

# -*- coding: utf-8 -*-

import datetime
import urlparse
import socket
import scrapy

from scrapy.loader.processors import MapCompose, Join
from scrapy.loader import ItemLoader

from terms.items import TermsItem


class BasicSpider(scrapy.Spider):
    name = "basic"
    allowed_domains = ["web"]

    # Start on a property page
    start_urls = (
        'http://dictionary.com/browse/there',
    )

    def parse(self, response):
        # Create the loader using the response
        l = ItemLoader(item=TermsItem(), response=response)

        # Load fields using XPath expressions
        l.add_xpath('title', '//h1[@class="head-entry"][1] / text()',
                    MapCompose(unicode.strip, unicode.title))
        l.add_xpath('definition', '//*[@class="def-list"][1]/text()',
                    MapCompose(unicode.strip, unicode.title))

        # Housekeeping fields
        l.add_value('url', response.url)
        l.add_value('project', self.settings.get('BOT_NAME'))
        l.add_value('spider', self.name)
        l.add_value('server', socket.gethostname())
        l.add_value('date', datetime.datetime.now())

        return l.load_item()

Atom Editor still flags 'import urlparse' and 'from scrapy.loader.processors import MapCompose, Join'

基于此stackoverflow问题:Scrapy ImportError: No module named Item,其中指示编码人员从项目的顶级目录中执行Scrapy命令。 - alecxe &#39; **让我想知道我使用的conda环境是否导致错误? No module named items堆栈问题有类似的观点&#39; **进行什么导入?什么是sys.path的工作目录/内容。如果父目录不在工作目录中并且不在sys.path中出现,则无法找到Project_L。 - ShadowRanger 5月11日22:24 &#39; **但是,据我所知,我正在构建项目并且相应的层次结构是正确的。

非常感谢任何帮助。对于冗长的帖子道歉,我只想尽可能全面,并确保人们理解这个问题与我所关联的类似问题之间的区别。

此致

2 个答案:

答案 0 :(得分:2)

简洁地说,我能够通过替换:

来生成解决方案并绕过错误
from terms.items import TermsItem

from ..items import TermsItem

此解决方案及其变体已在我最初附上的链接中提供:

Scrapy ImportError: No module named Item

我确信我最初尝试过,但是我怀疑当我试图重新运行代码时我必须忘记保存,因此从之前的.pyc拉出来了

应该注意的是,代码所依据的书,上述链接Scrapy ImportError: No module named Item表示我的原始代码

from terms.items import TermsItem

应该有效。 我强烈建议那些遇到相同错误的人,他们已经尝试了我链接的相关stackflow问题中提供的解决方案,并确保将父目录名称与蜘蛛的名称区分开来,通过 jq170727 查看此主题中的评论。这个人提供了关于如何使用-v选项来更好地识别问题的很好的指导,并且包含了他已经记录的非常详细的错误跟踪方法的链接,该方法使用了PYTHONVERBOSE命令。我是一个全新的,因此无法在这一点上完全理解其含义,但是,我将发布我认为是 jq170727的方法所引发的问题:

import scrapy.loader.processors # precompiled from C:\Users\User-1\Miniconda2\envs\p2env\lib\site-packages\scrapy\loader\processors.pyc
Traceback (most recent call last):

我认为这是由于我使用的conda环境目前正在使用我正在使用的Python2.7和Scrapy。再次,在完整的线程中,我链接并引用其他stackflow贡献者的相关点,我认为可能允许某人完全纠正他们的问题(因为我仍然非常绿色)。

答案 1 :(得分:1)

回溯表示问题出在特定的导入中。 您可以从命令行验证这一点。比如我的 机器我得到了

$ python -c 'from terms.items import TermsItem'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named terms.items

查看文件夹层次结构,我看不到名为“terms”的模块 这可能是你所遗漏的,但是既然你指出了 代码正在作者的VM中工作,我会尝试运行 该VM中的以下命令:

$ python -v -c 'from terms.items import TermsItem'

-v选项将使python显示所有导入的路径 e.g。

$ python -v -c 'from terms.items import TermsItem'
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# /usr/local/var/pyenv/versions/2.7.12/lib/python2.7/site.pyc matches /usr/local/var/pyenv/versions/2.7.12/lib/python2.7/site.py
import site # precompiled from /usr/local/var/pyenv/versions/2.7.12/lib/python2.7/site.pyc
...
import encodings.ascii # precompiled from /usr/local/var/pyenv/versions/2.7.12/lib/python2.7/encodings/ascii.pyc
Python 2.7.12 (default, Nov 29 2016, 14:57:54) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named terms.items
# clear __builtin__._
# clear sys.path
...
# cleanup ints: 20 unfreed ints
# cleanup floats

如果你在代码工作的地方那样做,那么输出中的某个地方就会 是一个成功的导入。从那以后你可以找到它的名字 您系统上缺少的模块并相应地安装它。

编辑:仔细观察你的帖子我注意到你提到你的“items.py”包含

class TermsItem(Item):
    # Primary fields
    ...

所以我怀疑你的问题是你的导入应该是

from items import TermsItem
相关问题