【发布时间】:2017-09-10 01:36:39
【问题描述】:
我正在尝试运行我自己的 scrapy 项目。我以为我在此处发布的线程中解决了一个相关问题:[urlparse: ModuleNotFoundError, presumably in Python2.7 and under conda
我做了一个完整的系统映像恢复,并简单地安装了 Python 2.7 和 Miniconda。但是,Atom 编辑器仍在标记/下划线“import urlparse”。
代码基于一本写得很好的书,作者提供了一个很棒的虚拟机游乐场来运行书中示例的脚本。在 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()
基于这个 stackoverflow 问题:Scrapy ImportError: No module named Item 其中指示编码人员 '**从项目的顶级目录中执行 Scrapy 命令。 – alecxe'** 让我想知道我使用的 conda 环境是否导致错误? No module named itemsstack question 也有类似的点'**什么是导入?什么是工作目录/sys.path 的内容。如果父目录不是工作目录且未出现在 sys.path 中,则找不到 Project_L。 – ShadowRanger 5 月 11 日 22:24'** 但是,据我所知,我正确地构建了项目并且相应的层次结构是正确的。
任何帮助将不胜感激。为这篇冗长的帖子道歉,我只是想尽可能全面,并确保人们理解这个问题与我所链接的类似问题之间的区别。
问候,
【问题讨论】:
-
抱歉,我忘了说从顶级目录 c:/...dictionary/ 中运行 $scrapy shell example.com 会产生同样的错误。这是另一个让我想知道它是否与在 conda 环境 (p2env) 中安装 scrapy 有关的事件。
标签: python-2.7 scrapy miniconda