我正在研究scrapy框架。
我在所有蜘蛛中都有一些常见的属性,所以我制作了一个BaseSpider。
BaseSpider
import scrapy
from src.LoggerFactory import get_logger
import ConfigParser
from redis import Redis
class BaseSpider(scrapy.Spider):
logger = get_logger()
def __init__(self, *args, **kwargs):
super(scrapy.Spider, self).__init__(*args, **kwargs)
config = ConfigParser.RawConfigParser()
config.read('../../config.cfg')
self.config = config
self.redis = Redis(host=config.get('redis', 'host'), port=config.get('redis', 'port'))
def parse(self, response):
pass
我的EbaySpider如下
EbaySpider
import scrapy
import json
from scrapper.items import Product
from BaseSpider import BaseSpider
class EbaySpider(BaseSpider):
name = "ebay"
allowed_domains = ["ebay.com"]
def __init__(self, *args, **kwargs):
super(BaseSpider, self).__init__(*args, **kwargs)
print self.redis # Throws AttributeError: 'EbaySpider' object has no attribute 'redis'
exit()
最奇怪的部分是我仍然可以访问scrapy.Spider
中的EbaySpider
属性,尽管它不是从scrapy.Spider
继承的。
此外,如果有任何scrapy方式来扩展Spiders,请建议,因为我无法在他们的文档中找到它。
由于
答案 0 :(得分:4)
您的super
用法错误。
典型的超类调用如下所示:
class C(B):
def method(self, arg):
super(C, self).method(arg)
你的样子在哪里:
class C(B):
def method(self, arg):
super(B, self).method(arg)
^