Scrapy如何在蜘蛛运行之间保存状态(通过scrapinghub)?

问题描述:

我有一只蜘蛛会按时运行。蜘蛛输入基于日期。从上次刮擦日期到今天的日期。所以问题是如何在Scrapy项目中保存最后一次刮擦的日期?有一个选项可以使用pkjutil模块从scrapy设置获取数据,但是我没有在文档中找到关于如何在该文件中写入数据的任何参考。任何想法?也许是一种选择? P.S.我的另一种选择是为此使用一些免费的远程MySql数据库。但如果简单的解决方案可用,看起来更多的工作。Scrapy如何在蜘蛛运行之间保存状态(通过scrapinghub)?

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) 

上述解决方案在本地运行时工作正常。但在Scrapinghub运行代码时,我没有收到这样的文件或目录。

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

你这样做是正确的,只是保存在纯文本文件,,,就是它 – Umair

+0

@Umair谢谢。查看更新的帖子。 –

的问题是固定的使用Scrapinghub Colections

而且scrapinghub API。现在工作很好。 这里是一个示例代码,以防有人会发现它有用。

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']