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
3 Réponses :
Le fichier Spider peut ne pas être à l'emplacement exact. il devrait être dans le dossier spider.
Le fichier Spider se trouve dans le dossier spiders. Je ne trouve pas ce qui ne va pas
Généralement, lorsque vous rencontrez ce problème, vous devez vous assurer de 3 choses:
scrapy.cfg
) scrapy.cfg
et spider dans project / spiders / spider.py
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
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!
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!
Ê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 descrapy.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!