Паук не найден, ключевой вопрос - PullRequest
0 голосов
/ 03 января 2019

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

На этот вопрос отвечали несколько раз, но ни одно из решений не помогло мне. Ошибка настолько проста, что я немного расстроен.

Когда я пытаюсь запустить своего паука, с 'scrapy crawl generic_spider' я получаю ошибку

KeyError: 'Spider not found: generic_spider'

Вот трассировка:

Traceback (most recent call last):
  File "C:\Users\Manuel\Anaconda3\Scripts\scrapy-script.py", line 10, in <module>
sys.exit(execute())
  File "C:\Users\Manuel\Anaconda3\lib\site-packages\scrapy\cmdline.py", line 150, in execute
_run_print_help(parser, _run_command, cmd, args, opts)
  File "C:\Users\Manuel\Anaconda3\lib\site-packages\scrapy\cmdline.py", line 90, in _run_print_help
func(*a, **kw)
  File "C:\Users\Manuel\Anaconda3\lib\site-packages\scrapy\cmdline.py", line 157, in _run_command
cmd.run(args, opts)
  File "C:\Users\Manuel\Anaconda3\lib\site-packages\scrapy\commands\crawl.py", line 57, in run
self.crawler_process.crawl(spname, **opts.spargs)
  File "C:\Users\Manuel\Anaconda3\lib\site-packages\scrapy\crawler.py", line 170, in crawl
crawler = self.create_crawler(crawler_or_spidercls)
  File "C:\Users\Manuel\Anaconda3\lib\site-packages\scrapy\crawler.py", line 198, in create_crawler
return self._create_crawler(crawler_or_spidercls)
  File "C:\Users\Manuel\Anaconda3\lib\site-packages\scrapy\crawler.py", line 202, in _create_crawler
spidercls = self.spider_loader.load(spidercls)
  File "C:\Users\Manuel\Anaconda3\lib\site-packages\scrapy\spiderloader.py", line 71, in load
raise KeyError("Spider not found: {}".format(spider_name))

KeyError: 'Паук не найден: generic_spider'

Также мой generic_spider и настройки.

import scrapy
import re
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from genericScraper.items import GenericScraperItem
from scrapy.exceptions import CloseSpider
from scrapy.http import Request

class GenericScraperSpider(CrawlSpider):

    name = "generic_spider"
    #Things

    def start_requests(self)

        #More things

    def parse_item(self, response)

settings.py

# -*- coding: utf-8 -*-

# Scrapy settings for genericScraper project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     https://doc.scrapy.org/en/latest/topics/settings.html
#     https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://doc.scrapy.org/en/latest/topics/spider-middleware.html

BOT_NAME = 'genericScraper'

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

EDIT:

Дерево (я не знаю, почему появляется только pycache, EDIT2: кажется, дерево показывает только папки)

C:.

└───genericScraper
├───spiders
│   └───__pycache__
└───__pycache__

CFG

[Настройки] default = genericScraper.settings

[развернуть] project = genericScraper

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Как правило, когда вы сталкиваетесь с этой проблемой, вы должны обеспечить 3 вещи:

  1. Вы находитесь в корневом каталоге проекта (где scrapy.cfg)
  2. У вас правильная структура проекта с scrapy.cfg и пауком в project/spiders/spider.py
  3. Ваши пауки - действительные классы, имеющие атрибут name

Краткое описание терминала:

$ pwd
/home/user/projects/scrapyexample
$ tree
.
├── scrapy.cfg
└── scrapyexample
    ├── __init__.py
    ├── items.py
    ├── middlewares.py
    ├── pipelines.py
    ├── settings.py
    └── spiders
        ├── __init__.py
        └── stackoverflow.py

$ cat scrapy.cfg 
[settings]
default = scrapyexample.settings

[deploy]
project = scrapyexample

$ cat scrapyexample/spiders/stackoverflow.py 
# -*- coding: utf-8 -*-
import scrapy


class StackoverflowSpider(scrapy.Spider):
    name = 'stackoverflow'
    #   ^^^^^^^^^^^^^^^^^^
    allowed_domains = ['stackoverlfow.om']
    start_urls = ['http://stackoverlfow.om/']

    def parse(self, response):
        pass
0 голосов
/ 03 января 2019

Файл паука может быть не в точном месте. это должно быть в папке паука.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...