2012-10-03 16 views
5

Ich habe die Antwort gefunden, unten. Kurz gesagt, falsche Einrückung in der ItemPipeline führte dazu, dass None zurückgegeben wurde.Scrapy Spider gibt keine zurück anstelle von Artikel

Ich habe versucht, einen CrawlSpider in Scrapy zu schreiben, noch nie zuvor mit Python gearbeitet. Der Spider crawlt, ruft die Callback-Funktion auf, extrahiert Daten und füllt das Element, gibt aber immer None zurück. Ich habe es mit einem Print-Artikel-Anruf getestet, alles war in Ordnung. Ich habe dies sowohl mit Rendite als auch mit Rendite versucht (obwohl ich den Unterschied immer noch nicht verstehe). Ehrlich gesagt, habe ich keine Ideen mehr. Da unten ist der Rückruf function.//edit die Spinne Code als auch

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 

und die Artikeldefinition hinzugefügt

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

Antwort

2

Ok, durch das Programm mit pdb nach Schritt fand ich den Fehler:

Da ich mehrere Spinnen habe, wollte ich mehrere ItemPipelines schreiben. Um sie pro Spinne differenzieren zu können, fügte ich einen

hinzu. Beachten Sie die Einrückung. Die Pipeline gab Nothing zurück, und die Ausgabe wurde None.

Nach dem Ändern der Einrückung funktionierte die Spinne einwandfrei. Ein weiteres Beispiel für PEBCAC.

+0

DANKE. Fehlermeldung, dass das Objekt '' NoneType 'kein Attribut' iterkeys' hat. Vielleicht kann Google hier helfen, umzuleiten. – KrisWebDev

Verwandte Themen