我如何使用MongoDB中的foreach方法进行刮擦/API调用而不会被网站列入黑名单



我目前收藏中有大约20个文档(我计划在100s中添加更多文档)。我正在使用mongoDB node.js客户端collection.foreach()方法遍历每个方法,并根据文档记录转到3个不同的端点:两个API(Walmart和Amazon)和一个网站刮擦(名称不相关)。每个文档都包含相关数据以执行请求,然后使用返回的数据更新文档。

我遇到的问题是沃尔玛API,网站刮擦不会在迭代结束时返回数据。或至少我的数据库没有更新。我的假设是foreach方法正在发出一堆同时的请求,并且我要么在端点允许的同时请求的一定任意限制中碰到,要么端点根本无法处理这么多请求,因此忽略了任何内容,而是忽略了任何内容它的"请求能力"。我已经运行了一些没有通过相同代码更新的文档,但是在一个只包含一个文档的不同集合中,它们确实更新了,所以我认为文档中的数据不好。

我正在使用node.js上的Heroku(并在本地进行测试)运行此操作。结果在Heroku实例和本地都相似。

如果我的假设正确,我需要一种更好的方法来构建此问题,以便在请求之间存在一些分离,或者也许只能在单个通行证上记录x。

听起来您需要限制您的网络请求。有一个很棒的节点模块来做这个称为限制器。代码看起来像这样:

var RateLimiter = require('limiter').RateLimiter;
var limiter = new RateLimiter(1, 1000);
var throttledRequest = function() {
    limiter.removeTokens(1, function() {
        console.log('Only prints once per second');
    });
};
throttledRequest();
throttledRequest();
throttledRequest();

最新更新