2016-09-05 4 views
0

Der Code ist wie folgt, jedes Mal, wenn es nur die erste Schleife, die letzten 9 Schleifen verschwunden. Also, was soll ich tun, um alle Schleifen zu bekommen?wie man Artikel laden in scrapy Schleife

Ich habe versucht, ein hinzufügen "m = []" und m.append (l), bekam aber einen Fehler "ERROR: Spinne muss anfordern, BaseItem zurückkehren, dict oder None, bekam 'ItemLoader'"

Link ist http://ajax.lianjia.com/ajax/housesell/area/district?ids=23008619&limit_offset=0&limit_count=100&sort=&&city_id=110000

def parse(self, response): 
    jsonresponse = json.loads(response.body_as_unicode()) 
    for i in range(0,len(jsonresponse['data']['list'])): 
     l = ItemLoader(item = ItjuziItem(),response=response) 
     house_code = jsonresponse['data']['list'][i]['house_code'] 
     price_total = jsonresponse['data']['list'][i]['price_total'] 
     ctime = jsonresponse['data']['list'][i]['ctime'] 
     title = jsonresponse['data']['list'][i]['title'] 
     frame_hall_num = jsonresponse['data']['list'][i]['frame_hall_num'] 
     tags = jsonresponse['data']['list'][i]['tags'] 
     house_area = jsonresponse['data']['list'][i]['house_area'] 
     community_id = jsonresponse['data']['list'][i]['community_id'] 
     community_name = jsonresponse['data']['list'][i]['community_name'] 
     is_two_five = jsonresponse['data']['list'][i]['is_two_five'] 
     frame_bedroom_num = jsonresponse['data']['list'][i]['frame_bedroom_num'] 
     l.add_value('house_code',house_code) 
     l.add_value('price_total',price_total) 
     l.add_value('ctime',ctime) 
     l.add_value('title',title) 
     l.add_value('frame_hall_num',frame_hall_num) 
     l.add_value('tags',tags) 
     l.add_value('house_area',house_area) 
     l.add_value('community_id',community_id) 
     l.add_value('community_name',community_name) 
     l.add_value('is_two_five',is_two_five) 
     l.add_value('frame_bedroom_num',frame_bedroom_num) 
     print l 
     return l.load_item() 

Antwort

3

Der Fehler:

ERROR: Spider must return Request, BaseItem, dict or None, got 'ItemLoader'

ist etwas irreführend, da Sie auch einen Generator zurückkehren können! Was hier passiert ist, dass die Rückkehr die Schleife und die ganze Funktion durchbricht. Sie können diese Funktion in einen Generator umwandeln, um dies zu vermeiden.

Ersetzen Sie einfach return durch yield in Ihrer letzten Zeile.

return l.load_item() 

zu:

yield l.load_item() 
+0

Wonderful! Das funktioniert! –

Verwandte Themen