2013-07-31 16 views
5

Dört örümcek içeren bir tarayıcıyı dağıtmaya çalışıyorum. örümceklerden biri XMLFeedSpider kullanır ve kabuk ve scrapyd ince çalışır, ancak diğerleri BaseSpider kullanmak ve tüm scrapyd çalıştırdığınızda bu hatayı verir, ama bu okuduğum kadarıyla kabukScrapy örümceğini çalıştırırken Scrapyd başlangıç ​​hatası

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

ince çalıştırmak örümceklerimde init işleviyle ilgili bir soruna işaret ediyor, ancak sorunu çözemiyorum. Bir init fonksiyonuna ihtiyacım yok ve eğer tamamen kaldırırsam hala hatayı alıyorum!

Benim Örümcek ben örümceğe bir kullanacağım bir başlat işlevini koyabilirsiniz bu

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 

gibi görünüyor, ama ben de aynı hatayı alıyorum.

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

Bu neden oluyor ve nasıl çözerim?

+2

Diğer örümceklerde '__init__' yöntemini tanımladınız mı? Sorun şu ki '' kwargs''ı kabul etmiyor olabilirsiniz .. – alecxe

+0

'XMLFeedSpider'' BaseSpider'den çok fazla bir şey yapmaz, bu yüzden bu örümceklerin neden bu hatayı tetikleyeceğini anlamıyorum. (Https://github.com/scrapy/scrapy/blob/master/scrapy/contrib/spiders/feed.py). Daha eksiksiz bir yığın izi gönderir misiniz? –

cevap

4

iyi cevap alecx tarafından verildi:

Benim init işlev:

scrapyd için bir yumurta içinde çalışabilmek için
def __init__(self, domain_name): 

, bu olmalıdır:

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

dikkate domain_name öğesini zorunlu argüman olarak geçirirsiniz

+0

thx! Bu benim problemimi çözdü. – Pullie