Scrapy всегда запускает одну и ту же команду из командной строки

Я пытаюсь изучить Scrapy на BashOnUbunty в Windows 10. Я создал паука (yelprest) с помощью команды genspider, а затем напрямую создал другого паука (quotes_spider), создав файл паука (следовал официальному руководству https://doc.scrapy.org/en/latest/intro/tutorial.html) .

Первый паук еще не протестирован, но я попытался пройти обучение со вторым пауком, и когда я пытаюсь запустить его, я получаю сообщение об ошибке, указывающее на первого паука. Кроме того, когда я пытаюсь запустить любую другую команду scrapy, например версию, я получаю ту же ошибку, что и выше. Ниже приведена ошибка:

(BashEnv) root > scrapy version
Traceback (most recent call last):
  File "/mnt/s/BashEnv/bin/scrapy", line 11, in <module>
    sys.exit(execute())
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/cmdline.py", line 148, in execute
    cmd.crawler_process = CrawlerProcess(settings)
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/crawler.py", line 243, in __init__
    super(CrawlerProcess, self).__init__(settings)
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/crawler.py", line 134, in __init__
    self.spider_loader = _get_spider_loader(settings)
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/crawler.py", line 330, in _get_spider_loader
    return loader_cls.from_settings(settings.frozencopy())
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/spiderloader.py", line 61, in from_settings
    return cls(settings)
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/spiderloader.py", line 25, in __init__
    self._load_all_spiders()
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/spiderloader.py", line 47, in _load_all_spiders
    for module in walk_modules(name):
  File "/mnt/s/BashEnv/local/lib/python2.7/site-packages/scrapy/utils/misc.py", line 71, in walk_modules
    submod = import_module(fullpath)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/mnt/s/BashEnv/Scrapy/Scrapy/spiders/yelprest.py", line 14
    rules = (
    ^
IndentationError: unexpected indent
(BashEnv) root >

Я не понимаю, почему я получаю ту же ошибку для каждой команды, которую я даю.


person Sasi    schedule 30.10.2017    source источник
comment
Это выглядит как ошибка питона. IndentationError означает, что у вас проблема с файлом yelprest.py. Ваш файл имеет правильный отступ? Вы смешивали табуляции и пробелы?   -  person Yall    schedule 30.10.2017
comment
Нет, дело в том, что приведенный выше вывод команды scrapy version совершенно не связан. Для любой команды, которую я дал, я получал вышеуказанный результат - каждая команда, которую я даю, указывает на первого паука, созданного мной с помощью команды genspider. Я удалил этого конкретного паука из этого места и могу нормально бегать. Из документации / форумов я вижу, что у меня должно быть несколько пауков в одном проекте. Но я не совсем понимаю это конкретное поведение.   -  person Sasi    schedule 30.10.2017
comment
Если вы запустите команду scrapy внутри каталога проекта, он выйдет из строя, если ваши файлы будут содержать ошибки. Даже если команда не связана. Вот почему я думаю, что ошибка в yelprest.py. И да, в одном проекте может быть несколько пауков.   -  person Yall    schedule 30.10.2017


Ответы (1)


В вашем yelprest.py файле (в строке 14 или ранее) есть ошибка: это недопустимый Python. Исправьте эту ошибку, и все будет работать. Убедитесь, что ваш файл имеет правильный отступ и не содержит пробелов и табуляции.

Изменить:

Чтобы убедиться, что ошибка находится в этом файле, просто удалите его. Если без этого файла все работает, значит ошибка должна быть!


Обновление:

В вашем вопросе это четко не указано, но в вашем комментарии ваш вопрос: «Почему Scrapy загружает мой код паука для каждой команды?». И ответ таков: потому что Scrapy был создан для этого. Некоторые команды можно запускать только внутри проекта, например check или crawl. А некоторые команды можно запускать где угодно, например startproject. Но внутри проекта Scrapy ЛЮБАЯ команда загрузит ВСЕ ваш код. Таким образом был сделан скрап.

Например, у меня есть проект crawler (я знаю, очень наглядный!):

$ cd ~
$ scrapy version
Scrapy 1.4.0
$ cd crawler/
$ scrapy version
2017-10-31 14:47:42 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: crawler)
2017-10-31 14:47:42 [scrapy.utils.log] INFO: Overridden settings: {...}
Scrapy 1.4.0
person Djunzu    schedule 30.10.2017
comment
Это указывает на ошибку отступа, правильность которой я проверил. Но мой вопрос заключался в том, почему он должен был выполнить этого паука, даже когда я не указываю на него (например, я только что выполнил команду версии). - person Sasi; 31.10.2017
comment
Теперь это имеет смысл. Спасибо, Джунзу! - person Sasi; 01.11.2017