我在node
写了一个脚本,将titles
和urls
从网页的登陆页面上抓到不同帖子的标题,然后从它的内页中获取每个用户的profile name
。我唯一无法解决的是在items
中打印output
和for loop
这两件事。
如何在items
中传递for loop
,以便脚本同时打印items
和output
?
我尝试过:
var request = require('request');
var cheerio = require('cheerio');
const url = 'https://stackoverflow.com/questions/tagged/web-scraping';
const host = 'https://stackoverflow.com';
function getPosts() {
request(url, function(error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
let linkstorage = [];
$('.summary .question-hyperlink').each(function() {
var items = $(this).text();
var links = host + $(this).attr("href");
linkstorage.push(links);
});
for (const newlink of linkstorage) {
request(newlink, function(error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
var output = $(".user-details a").eq(0).text();
console.log(output);
}
});
}
}
});
}
getPosts();
变量声明和赋值可以在JavaScript中分开。您可以在for循环范围之外定义items变量
// define it outside the jquery function scope
let items;
$('.summary .question-hyperlink').each(function(){
items = $(this).text();
...
});
for (const newlink of linkstorage){
request(newlink,function(error,response,html){
if (!error && response.statusCode == 200){
var $ = cheerio.load(html);
var output = $(".user-details a").eq(0).text();
console.log(output);
console.log(items); // It is visible in this scope
}
});
}
}