Ответ 1
Убедитесь, что вы установили свойство "name" паука. Пример:
class campSpider(BaseSpider):
name = 'campSpider'
Без свойства name менеджер scrapy не сможет найти вашего паука.
Это 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'
Мне не хватает элемента конфигурации?
Убедитесь, что вы установили свойство "name" паука. Пример:
class campSpider(BaseSpider):
name = 'campSpider'
Без свойства name менеджер scrapy не сможет найти вашего паука.
Также убедитесь, что ваш проект не называется scrapy
! Я совершил эту ошибку и переименовал ее в проблему.
Установили ли вы параметр SPIDER_MODULES?
SPIDER_MODULES
По умолчанию:
[]
Список модулей, в которых Scrapy будет искать пауков.
Пример:
SPIDER_MODULES = ['mybot.spiders_prod', 'mybot.spiders_dev']
Вы должны дать имя своему пауку.
Однако 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.
Попробуйте запустить scrapy list
в командной строке. Если на пауке есть какая-либо ошибка, она обнаружит это.
В моем случае я прямо копировал код из другого проекта и забыл изменить название проекта из импорта модуля spider
убедитесь, что ваш файл-паук сохранен в папке-пауке. Crawler ищет имя паука в каталоге паука
Для тех, у кого может быть та же проблема, не только вам нужно установить name
паука и проверить наличие SPIDER_MODULES
и NEWSPIDER_MODULE
в ваших настройках scrapy. Если вы используете сервис scrapyd
, вам также необходимо перезапустить, чтобы применить любое изменение. вы сделали
Также проверьте отступ, класс для моего паука был отступом на одной вкладке. Как-то это делает класс недействительным или чем-то еще.
Атрибут 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
без проекта используйте runspider и fileName с проектом, используйте обход и пример имени: C/user> scrapy runspider myFile.py
В моем случае я установил "LOG_STDOUT = True", и scrapyd не может вернуть результаты в ответ json, когда вы ищете своих пауков с "/listspiders.json". И вместо этого результаты печатаются в файлы журнала, которые вы установили в файле scrapyd default_scrapyd.conf. Итак, я изменил настройки, как это, и это работало хорошо.
LOG_STDOUT = False
У меня тоже была эта проблема, и она оказалась довольно маленькой. Убедитесь, что ваш класс унаследовал от scrapy.Spider
my_class(scrapy.Spider):