【发布时间】:2017-08-02 15:00:11
【问题描述】:
我是一个学习 js 和 node.js 的绝对初学者,我正在构建一个简单的爬虫。该代码正在抓取多个域。我想为抓取到哈希表中的每个域存储诸如标题、描述等元标记等信息,但我不知道如何进行。你能简单解释一下怎么做吗?这里有代码
var request = require('request');
var cheerio = require('cheerio');
var URL = require('url-parse');
var arr = ["http://allrecipes.com/", "http://www.gossip.fr/" ];
console.log("Visiting pages now... ");
for (var i = 0; i < arr.length; i++) {
setTimeout(request, 5000 * i, arr[i], function (error, response, body) {
if(error) {
console.log("Error: " + error);
}
console.log("Status code: " + response.statusCode);
if(response.statusCode === 200) {
var $ = cheerio.load(body);
console.log("Page title: " + $('title').text());
}
});
}
我修改了代码,如下所示,但不是将每个域的标题存储到散列中,而是仅存储数组的最后一个域的结果。见下面的代码
var request = require('request');
var cheerio = require('cheerio');
var URL = require('url-parse');
var output = {};
var arr = ["http://allrecipes.com/", "http://www.gossip.fr/", "http://www.clicrbs.com.br/rs/" ];
console.log("Visiting pages now... ");
for (var i = 0; i < arr.length; i++) {
var result = arr[i];
setTimeout(request, 5000 * i, arr[i], function (error, response, body) {
if(error) {
console.log("Error: " + error);
}
console.log("Status code: " + response.statusCode);
if(response.statusCode === 200) {
var $ = cheerio.load(body);
console.log("Page title: " + $('title').text());
}
{
output[result] = {error: error, title: $('title').text(), status: response.statusCode}
}
});
}
【问题讨论】:
-
JavaScript 没有关联数组。你指的是EcmaScript 6 Map吗?
-
专业提示:使用 let 代替 var。这可以让您免于日后的意外!
标签: javascript hashtable associative-array