我在Node中编写命令行脚本(因为我知道JS并且在Bash上吮吸+我需要jQuery来浏览DOM)...现在我正在读取输入文件并且我遍历每个线。
如何每行发出一个HTTP请求(GET),以便我可以使用jQuery加载生成的字符串并从每个页面中提取所需的信息?
我尝试过使用NPM httpsync
软件包...所以我可以在输入文件的每一行中进行一次阻止GET调用,但它不支持HTTPS,当然还有我正在点击的服务仅支持HTTPS。
谢谢!
答案 0 :(得分:5)
以async queue方式处理大量作业的好方法是request。
我还建议您查看cheerio发出HTTP请求,{{3}}来处理您获得的HTML。
将这些放在一起,你会得到类似的东西:
var q = async.queue(function (task, done) {
request(task.url, function(err, res, body) {
if (err) return done(err);
if (res.statusCode != 200) return done(res.statusCode);
var $ = cheerio.load(body);
// ...
done();
});
}, 5);
然后将所有网址添加到队列中:
q.push({ url: 'https://www.example.com/some/url' });
// ...
答案 1 :(得分:1)
我很可能会使用异步库的函数eachLimit
函数。这将允许您限制活动连接的数量以及在完成所有操作时获得回调。
async.eachLimit(urls, function(url, done) {
request(url, function(err, res, body) {
// do something
done();
});
}, 5, function(err) {
// do something
console.log('all done!');
})
答案 2 :(得分:0)
我担心同时发出一百万个请求,而不会进行某种限制/限制并发连接的数量,但看起来Node似乎已经“开箱即用”地限制了5-6个并发连接。
这是完美的,因为它可以使我的代码更加简单,同时还充分利用Node的固有异步性。