我正在尝试制作抓取IMDB并列出电影名称和分级的网络抓取工具。这是我的index.js文件。 假设我正在抓取10部电影。然后,我将抓取的结果保存在不同的文件中,如'message.txt'。现在我想发送这个message.txt文件作为对任何请求的响应。但是每当我提出请求时,最初都会向我的浏览器发送一个空文件。然后我注意到,抓取的结果保存在message.txt文件中需要一些时间。我认为这是因为所有操作在nodejs中都是异步的。那么只有在抓取完成后才能发送message.txt文件?动作完成后需要发送响应
var express = require('express');
var app = express();
var cheerio = require('cheerio');
var request = require('request');
var fs = require('fs');
app.listen(8080);
console.log('Running');
app.get('/', function(req, res) {
console.log('Recieved the get Request');
var i = 1;
var count = 0;
while (count < 10) {
var url = 'http://www.imdb.com/title/tt' + i + '/';
console.log(url);
count = count + 1;
i = i + 1;
request(url, function(error, response, html) {
if (!error) {
var $ = cheerio.load(html);
var title, ratings, released;
var json = {
title: '',
ratings: '',
released: ''
};
$('.title_wrapper').filter(function() {
var data = $(this);
json.title = data.children().first().text().trim();
json.released = data.children().last().children().last().text().trim();
});
$('.ratingValue').filter(function() {
var data = $(this);
json.ratings = parseFloat(data.text().trim());
});
console.log(json);
fs.appendFile('message.txt', JSON.stringify(json, null, 4) + '\n', function(err) {});
};
});
};
res.sendFile(__dirname + '/index.js');
});
使用的承诺 - 回调,当FS流完成后保存文件拨打电话发送文件。 –
你可以解释更多@GandalftheWhite – Mohit
我希望可以帮助 –