Я пытаюсь запустить свой собственный проект scrapy. Я думал, что решил связанную проблему в теме, которую я разместил здесь: [urlparse: ModuleNotFoundError, предположительно в Python2.7 и под conda
Я выполнил полное восстановление образа системы и просто установил Python 2.7 и Miniconda. Однако редактор Atom по-прежнему помечает/подчеркивает «import urlparse».
Код основан на хорошо написанной книге, и автор предоставляет отличную игровую площадку для виртуальных машин для запуска сценариев, приведенных в книге. В ВМ код работает нормально.
Однако, пытаясь попрактиковаться самостоятельно, я получаю следующую ошибку:
(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()
Основываясь на этом вопросе о стеке: Scrapy ImportError: нет модуля с именем Item, где находятся кодеры указано '**выполнить команду Scrapy из каталога верхнего уровня вашего проекта. – alecxe'** заставил меня задуматься, не вызывает ли ошибка среду conda, которую я использую? Вопрос о стеке Нет модулей с именами имеет аналогичную точку '**Что делает импорт? И какой рабочий каталог/содержимое sys.path. Вы не можете найти Project_L, если родительский каталог не является рабочим каталогом и не отображается в sys.path. — ShadowRanger 11 мая, 22:24'** Однако, насколько мне известно, я правильно структурирую проект, и соответствующая иерархия верна.
Любая помощь будет принята с благодарностью. Извиняюсь за длинный пост, я просто хотел быть как можно более полным и убедиться, что люди ценят разницу между этим вопросом и аналогичными, на которые я ссылался.
С уважением,