web-dev-qa-db-fra.com

Scrapy Spider not found erreur

Ceci est Windows 7 avec Python 2.7

J'ai un projet scrapy dans un répertoire appelé caps (c'est ici que se trouve scrapy.cfg)

Mon araignée est située dans majuscules\majuscules\spiders\campSpider.py

Je cd dans le projet scrapy et essayer de courir 

scrapy crawl campSpider -o items.json -t json

Je reçois une erreur indiquant que l'araignée est introuvable. Le nom de la classe est 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'

Est-ce qu'il me manque un élément de configuration?

26
user199421

Assurez-vous que vous avez défini la propriété "name" de l'araignée. Exemple:

class campSpider(BaseSpider):
   name = 'campSpider'

Sans le nom de propriété, le gestionnaire de scrapy ne pourra pas trouver votre araignée.

46
Sjaak Trekhaak

Assurez-vous également que votre projet ne s'appelle pas scrapy! J'ai fait cette erreur et le renommer a résolu le problème.

20
tamalet

Avez-vous configuré le paramètre SPIDER_MODULES ?

SPIDER_MODULES 

Valeur par défaut: []

Une liste de modules où Scrapy cherchera des araignées.

Exemple:

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

3
warvariuc

Vous devez donner un nom à votre araignée. 

Cependant, BaseSpider est obsolète, utilisez Spider à la place.

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

Le projet doit avoir été créé par la commande startproject:

scrapy startproject project_name

Ce qui vous donne l'arborescence suivante:

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
            ...

Assurez-vous que settings.py a la définition de votre module d'araignée ..__, par exemple:

BOT_NAME = 'bot_name' # Usually equals to your project_name 

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

Vous ne devriez pas avoir de problèmes pour faire fonctionner votre araignée localement ou sur ScrappingHub .

2
Rodrigo Ney

Essayez d'exécuter scrapy list sur la ligne de commande. S'il y a une erreur sur l'araignée, il la détectera. 

Dans mon cas, je copiais carrément le code d'un autre projet et j'oubliais de changer le nom du projet depuis l'importation du module spider

1
Aminah Nuraini

assurez-vous que votre fichier araignée est enregistré dans votre répertoire araignée. le Crawler cherche le nom de l'araignée dans le répertoire de l'araignée

1
ervinslavotic

Pour tous ceux qui pourraient avoir le même problème, vous devez non seulement définir la variable name de l'araignée et rechercher SPIDER_MODULES et NEWSPIDER_MODULE dans vos paramètres de scrap, si vous utilisez un service scrapyd, vous devez également redémarrer pour appliquer les modifications vous avez fait

0
Nicolò Gasparini

sans projet, utilisez runspider et nom_fichier avec projet, analyse et nom sample: C/user> scrapy runspider myFile.py

0
stephane schwenker

Nom attribut dans la classe CrawlSpider définit le nom de l'araignée et ce nom est utilisé en ligne de commande pour appeler l'araignée à fonctionner. 

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

Vérifiez l'indentation aussi, la classe de mon araignée était en retrait d'un onglet. D'une certaine manière, cela rend la classe invalide ou quelque chose. 

0
briankip