Je veux avoir quelques fonctionnalités génériques pour les araignées dans une classe d'araignée de base personnalisée.Custom BaseSpider Scrapy
Habituellement, les araignées scrapy héritent de la classe scrapy.Spider
.
J'ai essayé de créer une classe de BaseSpider dans le dossier des araignées de scrapy qui ne fonctionne pas
import scrapy
class BaseSpider(scrapy.Spider):
def __init__(self):
super(scrapy.Spider).__init__()
def parse(self, response):
pass
Et voici mon araignée réelle
import scrapy
import BaseSpider
class EbaySpider(BaseSpider):
name = "ebay"
allowed_domains = ["ebay.com"]
def __init__(self):
self.redis = Redis(host='redis', port=6379)
# rest of the spider code
donne cette erreur
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
Ensuite, j'ai essayé d'utiliser l'héritage multi et faire ressembler mon araignée ebay
class EbaySpider(scrapy.Spider, BaseSpider):
name = "ebay"
allowed_domains = ["ebay.com"]
def __init__(self):
self.redis = Redis(host='redis', port=6379)
# rest of the spider code
qui donne
TypeError: Error when calling the metaclass bases
metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
Je suis nouveau en python ainsi que scrapy et je suis en train de mettre en œuvre mon style PHP de codage dans ce qui ne fonctionne pas, je suppose.
Je suis à la recherche d'une approche appropriée.
Merci
Mise à jour
Changé la initialisation signature selon scrapy.Spider
BaseSpider
def __init__(self, *args, **kwargs):
super(scrapy.Spider, self).__init__(*args, **kwargs)
EbaySpider
class EbaySpider(BaseSpider):
def __init__(self, *args, **kwargs):
super(BaseSpider,self).__init__(*args, **kwargs)
self.redis = Redis(host='redis', port=6379)
encore obtenir
File "/scrapper/scrapper/spiders/ebay.py", line 11, in <module>
class EbaySpider(BaseSpider):
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
Avez-vous __init __()? – omdv
init dans quelle classe? –
Votre première erreur avec EbaySpider indique qu'il y a un problème avec __init__. Comment l'avez-vous défini? – omdv