gpt4 book ai didi

javascript - 在抓取之间暂停 Node 渗透

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:10 30 4
gpt4 key购买 nike

我正在读取 csv 中的链接并使用它来抓取。我希望 Node 渗透在抓取之间等待,可能是在抓取 10 个站点之后。我尝试使用 sleep ,但它似乎在错误的时间 sleep ,而下一个站点正在被抓取,导致它失败。

const osmosis = require('osmosis');
const fs = require('fs');
const stream = fs.createReadStream("data.csv");
const csv = require('fast-csv');

let ii = 0;

const scrapeData = (row) => {

osmosis
.get(row[0])
.set({
'data': '#data',
})
.data(function (listing) {
fs.appendFileSync('out2.ssv',listing.data);

if(ii%10 == 0 && ii!==0){
console.log('ss',ii);
sleep.sleep(1000);
}


}
})
}

let csvStream = csv()
.on("data", function (data) {
scrapeData(data)
ii++;
});

stream.pipe(csvStream);

我该如何处理这个问题。提前致谢。

最佳答案

您的问题是 Node 是异步的。您的查询将并行运行所有内容,并在完成后休眠。也许您想要做的是使用 setInterval 或 setTimeout。像这样的吗?

 var shouldPauseForTenSeconds = false
var listOfDataItems = []
var numberOfProcessedItems = 0

function scrapeData (row) {
if(shouldPauseForTenSeconds) {
shouldPauseForTenSeconds = false;
setTimeout(scrapeData.bind(null,row), 10000);
}
listOfDataItems.push(row)
numberOfProcessedItems++;
if(numberOfProcessedItems % 10 == 0 && numberOfProcessedItems > 0) {
numberOfProcessedItems = 0;
shouldPauseForTenSeconds = true;
}

osmosis
.get(row[0])
.set({
'data': '#data',
})
.data(function (listing) {
fs.appendFileSync('out2.ssv',listing.data);
})
}

let csvStream = csv()
.on("data", function (data) {
scrapeData(data)
ii++;
});

stream.pipe(csvStream);

关于javascript - 在抓取之间暂停 Node 渗透,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44910738/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com