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
treedans 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!