Подтвердить что ты не робот

Спайдер не нашел ошибку

Это Windows 7 с python 2.7

У меня есть проект scrapy в каталоге под названием caps (здесь есть scrapy.cfg)

Мой паук находится в шапках \caps\spiders\campSpider.py

Я подключился к проекту scrapy и попытался запустить

scrapy crawl campSpider -o items.json -t json

Я получаю сообщение об ошибке, что паук не найден. Имя класса campSpider

...
    spider = self.crawler.spiders.create(spname, **opts.spargs)
  File "c:\Python27\lib\site-packages\scrapy-0.14.0.2841-py2.7-win32.egg\scrapy\spidermanager.py", l
ine 43, in create
    raise KeyError("Spider not found: %s" % spider_name)
KeyError: 'Spider not found: campSpider'

Мне не хватает элемента конфигурации?

4b9b3361

Ответ 1

Убедитесь, что вы установили свойство "name" паука. Пример:

class campSpider(BaseSpider):
   name = 'campSpider'

Без свойства name менеджер scrapy не сможет найти вашего паука.

Ответ 2

Также убедитесь, что ваш проект не называется scrapy! Я совершил эту ошибку и переименовал ее в проблему.

Ответ 3

Установили ли вы параметр SPIDER_MODULES?

SPIDER_MODULES

По умолчанию: []

Список модулей, в которых Scrapy будет искать пауков.

Пример:

SPIDER_MODULES = ['mybot.spiders_prod', 'mybot.spiders_dev']

Ответ 4

Вы должны дать имя своему пауку.

Однако BaseSpider устарел, используйте Паук.

from scrapy.spiders import Spider
class campSpider(Spider):
   name = 'campSpider'

Проект должен был быть создан командой startproject:

scrapy startproject project_name

Что дает вам следующее дерево каталогов:

project_name/
    scrapy.cfg            # deploy configuration file

    project_name/             # project Python module, you'll import your code from here
        __init__.py

        items.py          # project items file

        pipelines.py      # project pipelines file

        settings.py       # project settings file

        spiders/          # a directory where you'll later put your spiders
            __init__.py
            ...

Убедитесь, что settings.py имеет определение вашего паук-модуля. например:

BOT_NAME = 'bot_name' # Usually equals to your project_name 

SPIDER_MODULES = ['project_name.spiders']
NEWSPIDER_MODULE = 'project_name.spiders'

У вас не должно быть проблем с запуском вашего паука локально или на ScrappingHub.

Ответ 5

Попробуйте запустить scrapy list в командной строке. Если на пауке есть какая-либо ошибка, она обнаружит это.

В моем случае я прямо копировал код из другого проекта и забыл изменить название проекта из импорта модуля spider

Ответ 6

убедитесь, что ваш файл-паук сохранен в папке-пауке. Crawler ищет имя паука в каталоге паука

Ответ 7

Для тех, у кого может быть та же проблема, не только вам нужно установить name паука и проверить наличие SPIDER_MODULES и NEWSPIDER_MODULE в ваших настройках scrapy. Если вы используете сервис scrapyd, вам также необходимо перезапустить, чтобы применить любое изменение. вы сделали

Ответ 8

Также проверьте отступ, класс для моего паука был отступом на одной вкладке. Как-то это делает класс недействительным или чем-то еще.

Ответ 9

Атрибут Name в классе CrawlSpider определяет имя паука, и это имя используется в командной строке для вызова паука работать.

import json

from scrapy import Spider
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.linkextractor import LinkExtractor

class NameSpider(CrawlSpider):
    name = 'name of spider'
    allowed_domains = ['allowed domains of web portal to be scrapped']
    start_urls = ['start url of of web portal to be scrapped']

    custom_settings = {
        'DOWNLOAD_DELAY': 1,
        'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
    }

    product_css = ['.main-menu']
    rules = [
        Rule(LinkExtractor(restrict_css=product_css), callback='parse'),
    ]

    def parse(self, response):
        //implementation of business logic

Ответ 10

без проекта используйте runspider и fileName с проектом, используйте обход и пример имени: C/user> scrapy runspider myFile.py

Ответ 11

В моем случае я установил "LOG_STDOUT = True", и scrapyd не может вернуть результаты в ответ json, когда вы ищете своих пауков с "/listspiders.json". И вместо этого результаты печатаются в файлы журнала, которые вы установили в файле scrapyd default_scrapyd.conf. Итак, я изменил настройки, как это, и это работало хорошо.

LOG_STDOUT = False

Ответ 12

У меня тоже была эта проблема, и она оказалась довольно маленькой. Убедитесь, что ваш класс унаследовал от scrapy.Spider

my_class(scrapy.Spider):