2012-10-03 16 views
5

Ho trovato la risposta, in basso. In breve, l'indentazione errata nella ItemPipeline ha causato il ritorno di None.Scrapy Spider restituisce None anziché Item

Ho cercato di scrivere un CrawlSpider in Scrapy, non avendo mai lavorato con Python prima. Lo Spider esegue la scansione, chiama la funzione di callback, estrae i dati e riempie l'elemento, ma restituisce sempre Nessuno. L'ho provato con una chiamata di articoli di stampa, tutto era in ordine. Ho provato questo con rendimento e rendimento (anche se ancora non capisco la differenza). Francamente, sono fuori di idee. In basso è il function.//edit callback aggiunto il codice di ragno così

class ZeitSpider(CrawlSpider): 
name= xxxx 
allowed_domains = ['example.com'] 
start_urls = ['http://www.example.com/%d/%d' %(JAHR,39)] 
rules = (Rule(SgmlLinkExtractor(restrict_xpaths=('//ul[@class="teaserlist"]/li[@class="archiveteaser"]/h4[@class="title"]')),callback='parse_url',follow=True),) 

def parse_url(self,response): 

    def parse_url(self,response): 
    hxs = HtmlXPathSelector(response) 

    article = Article() 

    article['url']= response.url.encode('UTF-8',errors='strict') 

    article['author']= hxs.select('//div[@id="informatives"]/ul[@class="tools"]/li[@class="author first"]/text()').extract().pop().encode('UTF-8',errors='strict') 
    article['title']= hxs.select('//div[@class="articleheader"]/h1/span[@class="title"]/text()').extract().pop().encode('UTF-8',errors='strict') 

    article['text']= hxs.select('//div[@id="main"]/p/text()').extract().pop().encode('UTF-8',errors='strict') 

    article['excerpt'] = hxs.select('//p[@class="excerpt"]/text()').extract().pop().encode('UTF-8',errors='strict') 
    yield article 

e la definizione oggetto

class Article(Item): 
    url=Field() 
    author=Field() 
    text=Field() 
    title=Field() 
    excerpt=Field() 

risposta

2

Ok, dopo passando attraverso il programma con PDB ho trovato l'errore:

Perché ho più spider, volevo scrivere più ItemPipelines. Per differenziarli per Spider, ho aggiunto uno

if spider.name=='SpiderName' 
    return item 

Notare la rientranza. La pipeline ha restituito Nothing, quindi l'output è diventato None.

Dopo aver modificato l'indentazione, il ragno ha funzionato perfettamente. Un altro esempio di PEBCAC.

+0

GRAZIE. Il messaggio di errore era l'oggetto ''NoneType' non ha attributo 'iterkeys''. Forse può aiutare Google a reindirizzare qui. – KrisWebDev

Problemi correlati