2016-10-13 2 views
0

Also habe ich einen einfachen Crawler, der 3 Speicherortseiten durchsucht und die Speicherorte nach json analysiert. Ich drucke (app_data ['speichert']) und druckt alle drei Seiten von Geschäften. Wenn ich jedoch versuche, es auszugeben, bekomme ich nur zufällig eine der drei Seiten in meine JSON-Datei geschrieben. Ich möchte, dass alle Streams in die Datei geschrieben werden. Jede Hilfe wäre großartig. Hier ist der Code:JSON.Dump erfasst nicht den gesamten Stream

import scrapy 
import json 
import js2xml 

from pprint import pprint 

class StlocSpider(scrapy.Spider): 
    name = "stloc" 
    allowed_domains = ["bestbuy.com"] 
    start_urls = (
     'http://www.bestbuy.com/site/store-locator/11356', 
     'http://www.bestbuy.com/site/store-locator/46617', 
     'http://www.bestbuy.com/site/store-locator/77521' 
    ) 

    def parse(self, response): 
     js = response.xpath('//script[contains(.,"window.appData")]/text()').extract_first() 
     jstree = js2xml.parse(js) 
     # print(js2xml.pretty_print(jstree)) 

     app_data_node = jstree.xpath('//assign[left//identifier[@name="appData"]]/right/*')[0] 
     app_data = js2xml.make_dict(app_data_node) 
     print(app_data['stores']) 

     for store in app_data['stores']: 
      yield store 

     with open('stores.json', 'w') as f: 
      json.dump(app_data['stores'], f, indent=4) 
+2

Sie überschreiben die Datei jedes Mal, wenn Sie 'parse()' aufrufen. Sie müssen alle Ergebnisse in einer Liste sammeln und die gesamte Liste in die Datei schreiben. – Barmar

Antwort

0

Sie öffnen die Datei zum Schreiben jedes Mal, aber Sie möchten anhängen. Versuchen Sie, den letzten Teil zu diesem Wechsel:

with open('stores.json', 'a') as f: 
    json.dump(app_data['stores'], f, indent=4) 

Wo 'a' zum Anhängen der Datei öffnet.

+0

Danke! Das war's. – rjdel

Verwandte Themen