web-dev-qa-db-de.com

Fehler bei der Scrapy-Spinne nicht gefunden

Dies ist Windows 7 mit Python 2.7

Ich habe ein Scrapy-Projekt in einem Verzeichnis namens caps (hier befindet sich scrapy.cfg)

Meine Spinne befindet sich in caps\caps\spiders\campSpider.py

Ich gehe in das Scrapy-Projekt und versuche zu laufen 

scrapy crawl campSpider -o items.json -t json

Ich erhalte die Fehlermeldung, dass die Spinne nicht gefunden werden kann. Der Klassenname ist 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'

Fehlt mir ein Konfigurationselement?

26
user199421

Stellen Sie sicher, dass Sie die Eigenschaft "name" der Spinne eingestellt haben. Beispiel:

class campSpider(BaseSpider):
   name = 'campSpider'

Ohne die Namenseigenschaft kann der Scrapy-Manager Ihre Spinne nicht finden.

46
Sjaak Trekhaak

Stellen Sie außerdem sicher, dass Ihr Projekt nicht scrapy heißt! Ich habe diesen Fehler gemacht und ihn umbenannt, das Problem behoben.

20
tamalet

Haben Sie die Einstellung SPIDER_MODULES eingerichtet?

SPIDER_MODULES 

Voreinstellung: []

Eine Liste der Module, in denen Scrapy nach Spinnen sucht.

Beispiel:

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

3
warvariuc

Du musst deiner Spinne einen Namen geben. 

BaseSpider ist jedoch veraltet, verwenden Sie stattdessen Spider.

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

Das Projekt sollte mit dem Befehl startproject erstellt worden sein:

scrapy startproject project_name

Welches gibt Ihnen den folgenden Verzeichnisbaum:

project_name/
    scrapy.cfg            # deploy configuration file

    project_name/             # project's 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
            ...

Stellen Sie sicher, dass settings.py die Definition Ihres Spider-Moduls hat.

BOT_NAME = 'bot_name' # Usually equals to your project_name 

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

Sie sollten keine Probleme haben, Ihre Spinne lokal oder über ScrappingHub auszuführen.

2
Rodrigo Ney

Versuchen Sie, scrapy list in der Befehlszeile auszuführen. Wenn die Spinne fehlerhaft ist, wird sie erkannt. 

In meinem Fall habe ich Code aus einem anderen Projekt stumpf kopiert und vergessen, den Projektnamen aus dem Spider-Modul-Import zu ändern

1
Aminah Nuraini

stellen Sie sicher, dass Ihre Spider-Datei in Ihrem Spider-Verzeichnis gespeichert ist. Der Crawler sucht im Spider-Verzeichnis nach dem Namen der Spinne

1
ervinslavotic

Für alle, die möglicherweise dasselbe Problem haben, müssen Sie nicht nur die Variable name der Spinne festlegen und in den Scrapy-Einstellungen nach SPIDER_MODULES und NEWSPIDER_MODULE suchen. Wenn Sie einen scrapyd-Dienst ausführen, müssen Sie auch einen Neustart durchführen, um Änderungen vorzunehmen Du hast gemacht

0

verwenden Sie ohne das Projekt runspider und Dateiname Mit dem Projekt verwenden Sie Durchforsten und Namen Beispiel: C/user> scrapy runspider myFile.py

0

Name Attribut in der CrawlSpider-Klasse definiert den Namen der Spinne. Dieser Name wird in der Befehlszeile verwendet, um die Spinne aufzurufen. 

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
0
Asad Manzoor

Ich hatte auch dieses Problem und es stellte sich als ziemlich klein heraus. Stellen Sie sicher, dass Ihre Klasse von scrapy.Spider Erbt.

my_class(scrapy.Spider):
0
Thomas Gooch

In meinem Fall setze ich 'LOG_STDOUT = True' und scrapyd kann die Ergebnisse nicht an json zurücksenden, wenn Sie nach Ihren Spinnen mit '/listspiders.json' suchen. Und stattdessen werden die Ergebnisse in die Protokolldateien gedruckt, die Sie in der Datei default_scrapyd.conf von scrapyd festgelegt haben. Also habe ich die Einstellungen wie folgt geändert und es hat gut funktioniert.

LOG_STDOUT = False
0
七月飞霜

Überprüfen Sie auch die Einrückung. Die Klasse für meine Spinne wurde um eine Registerkarte eingerückt. Irgendwie macht das die Klasse ungültig oder so. 

0
briankip