1
votes

Araignée introuvable, problème clé

J'ai déjà réalisé un projet de travail avec Scrapy, mais c'était un peu le bordel, j'ai donc décidé d'en faire un nouveau plus soigné.

Cette question a reçu plusieurs réponses mais aucune des solutions n'aide vraiment moi. L'erreur est tellement basique que je suis un peu frustré.

Quand j'essaye d'exécuter mon spider, avec 'scrapy crawl generic_spider' j'obtiens l'erreur

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

Voici le Traceback:

# -*- 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'

KeyError: 'Spider not found: generic_spider'

Aussi, mon generic_spider et ses paramètres.

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

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

EDIT:

Arbre (je ne sais pas pourquoi seul pycache apparaît, EDIT2 : il semble que l'arborescence ne montre que les dossiers)

C :.

KeyError: 'Spider not found: generic_spider'

cfg

[paramètres] default = genericScraper.settings

[deploy] project = genericScraper


2 commentaires

Êtes-vous sûr que le répertoire de travail de votre terminal se trouve dans le répertoire racine de l'araignée? Pourriez-vous également publier votre arborescence de projet? Je pense que sur Windows, vous pouvez simplement taper tree dans le terminal. Aussi contenu de scrapy.cfg ?


Pour créer le projet, j'ai utilisé scrapy startproject genericScraper puis je viens d'ajouter un nouveau fichier dans spiders avec le nom generic_spider C'est bizarre, car mon autre projet est presque le même et cela fonctionne très bien. Merci pour l'aide!


3 Réponses :


0
votes

Le fichier Spider peut ne pas être à l'emplacement exact. il devrait être dans le dossier spider.


1 commentaires

Le fichier Spider se trouve dans le dossier spiders. Je ne trouve pas ce qui ne va pas



1
votes

Généralement, lorsque vous rencontrez ce problème, vous devez vous assurer de 3 choses:

  1. Vous êtes dans le répertoire racine du projet (où se trouve scrapy.cfg )
  2. Vous avez une structure de projet correcte avec scrapy.cfg et spider dans project / spiders / spider.py
  3. Vos araignées sont des classes valides qui ont l'attribut name

Aperçu du terminal:

$ 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


1 commentaires

Je ne sais pas comment mais, j'ai tout effacé et créé à nouveau le projet en suivant les règles et cela a fonctionné! Merci pour l'aide!



0
votes

J'ai trouvé le problème!

Supprimer

LOG_STDOUT = Vrai

Avoir LOG_STDOUT = True dans settings.py rend scrapyd pour une raison quelconque pour ne pas voir l'araignée, donc la suppression de la ligne des paramètres a résolu le problème!


0 commentaires