【问题标题】:Scrapy how to save a State between spider runs (via scrapinghub)?Scrapy 如何在蜘蛛运行之间保存状态(通过 scrapinghub)?
【发布时间】:2018-05-09 08:11:39
【问题描述】:

我有一个可以按时运行的蜘蛛。蜘蛛输入基于日期。从上次刮擦的日期到今天的日期。那么问题是如何在 Scrapy 项目中保存最后一次抓取的日期?有一个选项可以使用 pkjutil 模块从 scrapy 设置中获取数据,但我在文档中没有找到关于如何在该文件中写入数据的任何参考。任何想法?也许是另一种选择? 附言我的另一个选择是为此使用一些免费的远程 MySql DB。但如果有简单的解决方案,看起来工作量更大。

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'

【问题讨论】:

  • 你做对了,保存在纯文本文件中,,,就是这样
  • @Umair 谢谢。查看更新后的帖子。

标签: python-2.7 scrapy scrapinghub


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    相关资源
    最近更新 更多