2017-06-17 12 views
0

私はジェネリックスパイダーを作成して、最も一般的なタスクとジェネリックスパイダーを継承し、ウェブサイト固有の変数を宣言します。1つのジェネリックスパイダースパイダーと複数の特定のスパイダーを作成する

genericspider.pyがあります:

# -*- coding: utf-8 -*- 
import scrapy 
from scrapy.spiders import Spider, CrawlSpider 

class GenericProductSpider(scrapy.Spider): 
    def __init__(self, start_urls=[], finditemprop='', keywords='', **kwargs): 
     CrawlSpider.__init__(self, **kwargs) 
     print ("\n\n Init Generic \n") 

そして私は一般的なものと同じディレクトリにspecificspider.pyを持っています。

# -*- coding: utf-8 -*- 
import scrapy 
from scrapy.spiders import Spider, CrawlSpider 
from .genericfabric import GenericFabricsSpider 

class SpecificSpider(GenericProductSpider): 

    def __init__(self, **kwargs): 
     print ("\n init specific \n") 
     name = "specific1" 
     start_urls = ['http://www.specificdomian.com',] 

     super(SpecificSpider, self).__init__(name, start_urls, **kwargs) 

スーパークラスのイニシャライザを正しく呼び出す方法についての理解の問題があるようです。私はあらゆる種類のエラーメッセージを受け取りますが、のinitメソッドは、一度も実行されていません。

+0

cookiecutter pythonモジュールを参照してください。cookiecutter scrapy templates .... y – scriptso

+0

@scriptsoこれは面白そうです。私が理解している限り、それはテンプレートのようなもので、私の変数を内部に投げ込むことができ、それは私のためにクモを作りますか?私はコードを更新する必要がある場合は、私はすべてのスパイダーでそれを更新する必要がありますか? – Chris

答えて

0

実際には正常に動作しているようです - おそらくパラメータに問題があっただけです。スーパークラスの

の作業コード:

# -*- coding: utf-8 -*- 
from scrapy.spiders import Spider 
from test.items import TestItem 


class TestsuperSpider(Spider): 
    name = "testsuper" 
    allowed_domains = ["craigslist.org"] 
    start_urls = ["http://sfbay.craigslist.org/search/npo"] 
    supervar = "meine super var" 

    def __init__(self): 
     print ("super init") 

    def parse(self, response): 
     print ("super Parse") 

    def supermethod (self, subvar): 
     print ("\n\n Supermethod \n\n ") 
     print (self.supervar + " - " + subvar) 

クラスとサブクラス:

# -*- coding: utf-8 -*- 
from scrapy.spiders import Spider 
from test.items import TestItem 
from test.spiders.testsuper import TestsuperSpider 


class TestsubSpider(TestsuperSpider): 
    name = "testsub" 
    allowed_domains = ["craigslist.org"] 
    start_urls = ["http://sfbay.craigslist.org/search/npo"] 
    subvar = "subvar" 

    def __init__(self): 
     print ("sub init") 
     super(TestsubSpider, self).__init__() 

    def parse(self, response): 
     super(TestsubSpider, self).supermethod(self.subvar) 
     print ("sub Parse") 

は、今ではクリーンアップとそれにそれを調整する必要が目的だが、予想通り、少なくともコードが実行されます。

関連する問題