2017-11-25 4 views
0

Ich habe eine Spinne, die im Zeitplan läuft. Die Spider-Eingabe basiert auf Datum. Vom Datum des letzten Kratzens bis zum heutigen Datum. Die Frage ist also, wie das Datum des letzten Scrape im Scrapy-Projekt gespeichert werden kann. Es gibt eine Option zum Abrufen von Daten aus scrapy-Einstellungen mit dem Modul pkjutil, aber ich habe keinen Verweis in der Dokumentation gefunden, wie Daten in diese Datei geschrieben werden können. Irgendeine Idee? Vielleicht eine Alternative? P.S. Meine andere Wahl ist, irgendeine freie entfernte MySql DB gerade dafür zu benutzen. Aber sieht mehr Arbeit aus, wenn einfache Lösung verfügbar ist.Scrapy, wie man einen Zustand zwischen Spinnenläufen (über Scrapinghub) speichert?

import pkgutil 

class CodeSpider(scrapy.Spider): 
name = "code" 
allowed_domains = ["google.com.au"] 

def start_requests(self): 
    f = pkgutil.get_data("au_go", "res/state.json") 
    ids = json.loads(f) 
    id = ids[0]['state'] 

    yield {'state':id} 
    ids[0]['state'] = 'New State' 
    with open('./au_go/res/state.json', 'w') as f: 
     json.dump(ids, f) 

Die obige Lösung funktioniert gut, wenn lokal ausgeführt wird. Aber ich bekomme keine solche Datei oder Verzeichnis, wenn ich den Code bei Scrapinghub ausführe.

File "/tmp/unpacked-eggs/__main__.egg/au_go/spiders/test_state.py", line 33, in parse 
    with open(savePath, 'w') as f: 
IOError: [Errno 2] No such file or directory: './au_go/res/state.json' 
+0

Sie tun es richtig, nur in einer einfachen Textdatei speichern ,,, das ist es – Umair

+0

@Umair Danke. Siehe aktualisierten Beitrag. –

Antwort

0

Das Problem wird mit der Verwendung von Scrapinghub Colections festen

Und scrapinghub API. Funktioniert jetzt gut. Hier ist ein Beispielcode für den Fall, dass jemand ihn nützlich findet.

from scrapinghub import ScrapinghubClient 


client = ScrapinghubClient(Your API KEY) 
project = client.get_project(Your Project ID) 
collections = project.collections 

last_accessed = collections.get_store('last_accessed') 
last_accessed.set({'_key': 'Date', 'value': '12-54-1235'}) 
print last_accessed.get('Date')['value'] 
Verwandte Themen