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?
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.
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.
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']
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 .
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
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
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
sans projet, utilisez runspider et nom_fichier avec projet, analyse et nom sample: C/user> scrapy runspider myFile.py
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
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.