2013-07-31 9 views
5

Ich versuche, einen Crawler mit vier Spinnen zu implementieren. Eine der Spinnen verwendet XMLFeedSpider und läuft von der Schale und scrapyd in Ordnung, aber die anderen verwenden BaseSpider und alle geben diesen Fehler, wenn in scrapyd laufen, aber fein aus der SchaleScrapyd Init Fehler beim Ausführen von Scrapy Spider

TypeError: init() got an unexpected keyword argument '_job'

Aus laufen, was ich das gelesen habe verweist auf ein Problem mit der Init-Funktion in meinen Spinnen, aber ich kann das Problem nicht lösen. Ich brauche keine Init-Funktion und wenn ich es komplett entferne, bekomme ich immer noch den Fehler!

Meine Spinne sieht aus wie diese

from scrapy import log 
from scrapy.spider import BaseSpider 
from scrapy.selector import XmlXPathSelector 
from betfeeds_master.items import Odds 
# Parameters 
MYGLOBAL = 39 
class homeSpider(BaseSpider): 
    name = "home" 
    #con = None 

    allowed_domains = ["www.myhome.com"] 
    start_urls = [ 
     "http://www.myhome.com/oddxml.aspx?lang=en&subscriber=mysubscriber", 
    ] 
    def parse(self, response): 

     items = [] 

     traceCompetition = "" 

     xxs = XmlXPathSelector(response) 
     oddsobjects = xxs.select("//OO[OddsType='3W' and Sport='Football']") 
     for oddsobject in oddsobjects: 
      item = Odds() 
      item['competition'] = ''.join(oddsobject.select('Tournament/text()').extract()) 
      if traceCompetition != item['competition']: 
       log.msg('Processing %s' % (item['competition']))    #print item['competition'] 
       traceCompetition = item['competition'] 
      item['matchDate'] = ''.join(oddsobject.select('Date/text()').extract()) 
      item['homeTeam'] = ''.join(oddsobject.select('OddsData/HomeTeam/text()').extract()) 
      item['awayTeam'] = ''.join(oddsobject.select('OddsData/AwayTeam/text()').extract()) 
      item['lastUpdated'] = '' 
      item['bookie'] = MYGLOBAL 
      item['home'] = ''.join(oddsobject.select('OddsData/HomeOdds/text()').extract()) 
      item['draw'] = ''.join(oddsobject.select('OddsData/DrawOdds/text()').extract()) 
      item['away'] = ''.join(oddsobject.select('OddsData/AwayOdds/text()').extract()) 

      items.append(item) 

     return items 

ich eine Anwendung eine init-Funktion, um die Spinne setzen kann, aber ich habe genau den gleichen Fehler.

def __init__(self, *args, **kwargs): 
    super(homeSpider, self).__init__(*args, **kwargs) 
    pass 

Warum passiert das und wie löse ich es?

+2

Haben Sie die Methode "__init__" in anderen Spidern definiert? Das Problem kann sein, dass du '** kwargs' dort nicht akzeptierst. – alecxe

+0

' XMLFeedSpider' überschreibt nicht viel von 'BaseSpider' also sehe ich nicht, warum diese Spider diesen Fehler auslösen würden. (https://github.com/scrapy/scrapy/blob/master/scrapy/contrib/spiders/feed.py). Könnten Sie einen vollständigeren Stack-Trace veröffentlichen? –

Antwort

4

wurde die gute Antwort von alecx gegeben:

Meine init Funktion war:

def __init__(self, domain_name): 

Um innerhalb eines Eies für scrapyd zu arbeiten, sollte es sein:

def __init__(self, domain_name, **kwargs): 

Berücksichtigung Sie übergeben Domänenname als obligatorisches Argument

+0

Danke! Das hat mein Problem gelöst. – Pullie

Verwandte Themen