Javascript 网络爬虫-返回下一个函数中使用的数组
我可以确认的第一个功能工作正常 我想向变量AtozLink返回一个数组,以便在后面的函数中使用它。我将向数组中的每个url发出请求,并从这些链接中提取更多信息 非常感谢,我已经作为一个项目做了几天了,我是jQuery、Web爬行、JS、NodeJS和expressJS的初学者。为了工作而陷入困境Javascript 网络爬虫-返回下一个函数中使用的数组,javascript,jquery,node.js,request,cheerio,Javascript,Jquery,Node.js,Request,Cheerio,我可以确认的第一个功能工作正常 我想向变量AtozLink返回一个数组,以便在后面的函数中使用它。我将向数组中的每个url发出请求,并从这些链接中提取更多信息 非常感谢,我已经作为一个项目做了几天了,我是jQuery、Web爬行、JS、NodeJS和expressJS的初学者。为了工作而陷入困境 var express = require('express'); var request = require('request'); var cheerio = require
var express = require('express');
var request = require('request');
var cheerio = require('cheerio');
var router = express.Router();
var fullUrl;
fullUrl = [];
var AtoZLinks = function(){
var url = 'http://example1.com';
request(url, function(error, response, html) {
if (!error && response.statusCode === 200) {
var $ = cheerio.load(html);
var fullUrl = [];
var places = "Places";
$('.clear a').each(function() {
var link = $(this);
link.each(function(index) {
var href = link.attr('href');
if (href.match(places)) {
// The urls from fullUrl here to be returned to parent variable.
fullUrl[index] = url + href; // Think something is wrong here... I've also tried "fullUrl.push(url + href);"
console.log(fullUrl); // This prints out all urls correctly
}
});
});
for (var i = 0; i < fullUrl.length; i++) {
console.log(fullUrl[i];
} // This code only prints out the last url stored (So I'm thinking the urls are being stored incorrectly...)
}
});
};
/* GET crawler page. */
router.get('/crawler', function(req, res, next) {
AtoZLinks();
next();
}, function(req, res) {
});
module.exports = router;
// Feel free to ignore the following work I've done or..
// Your support with the the following function will be a bonus!
// I need to use the links in the previous array variable in the following
// function to extract further urls within those urls that I will work with.
var url = AtoZLinks;
request(AtoZLinks, function(error, response, html) {
if (!error && response.statusCode === 200) {
var $ = cheerio.load(html);
// This selector is the code needed to extract the links from within the
// links in the AtoZLinks array.
$('div.fclist-section.clear.list-four').each(function() {
$(this).find('a').each(function() {
var link = $(this);
var href = link.attr('href');
fullUrl = url + href;
console.log(fullUrl);
});
});
}
);
var express=require('express');
var请求=要求(“请求”);
var cheerio=需要('cheerio');
var router=express.router();
var-fullUrl;
fullUrl=[];
var AtoZLinks=函数(){
var url='1〕http://example1.com';
请求(url、函数(错误、响应、html){
如果(!error&&response.statusCode==200){
var$=cheerio.load(html);
var fullUrl=[];
var places=“places”;
$('.clear a')。每个(函数(){
var-link=$(这个);
链接。每个(功能(索引){
var href=link.attr('href');
如果(href.match(位置)){
//此处fullUrl中的URL将返回到父变量。
fullUrl[index]=url+href;//我认为这里有问题……我还尝试了“fullUrl.push(url+href);”
console.log(fullUrl);//这将正确打印出所有URL
}
});
});
for(var i=0;i
你的意思是这样的吗
var arrURLs;
arrURLs = [
'www.ask.com',
'www.google.com',
'www.bing.com',
'www.yahoo.com'
];
AtoZLinks(arrURLs);
var AtoZLinks = function(theURLs){
for (var i = 0; i < theURLs.length; i++) {
var url = theURLs[i];
request(url, function(error, response, html) {
if (!error && response.statusCode === 200) {
var $ = cheerio.load(html);
var fullUrl = [];
var places = "Places";
$('.clear a').each(function() {
var link = $(this);
link.each(function(index) {
var href = link.attr('href');
//absolute match
if (href === url) {
//true
} else {
//false
}
//href contains url
if (href.indexOf(url) > -1) {
//true
} else {
//false
}
if (href.match(places)) {
// The urls from fullUrl here to be returned to parent variable.
fullUrl.push(url + href);
console.log(JSON.stringify(fullUrl));
}
});
});
}
});
}
};
var;
arrURL=[
“www.ask.com”,
“www.google.com”,
“www.bing.com”,
“www.yahoo.com”
];
AtozLink(arrURL);
var AtoZLinks=函数(URL){
for(var i=0;i-1){
//真的
}否则{
//假的
}
如果(href.match(位置)){
//此处fullUrl中的URL将返回到父变量。
fullUrl.push(url+href);
log(JSON.stringify(fullUrl));
}
});
});
}
});
}
};
Javascript是一种异步语言,这意味着当你要求它做某件事时,它会在一个并行执行的待办事项列表中对该进程进行排队,以便继续解析文档。一种解决方法是建立一个回调链,当请求完成时,它会调用一些作为参数传递的函数。我相信你已经回答了我问了一个额外的问题:“如何在下一个函数中使用链接数组”。我现在将尝试实现它。非常感谢:)嗨,WhiteHat,不幸的是,我仍在挣扎。首先,我需要先检查完整URL数组是否返回了正确的值…谢谢。我在向自己证明数组包含我存储的URL时遇到了问题…我希望这张图片是有用的…刚刚开始工作,不幸的是,它们阻止了大量内容,包括postmg and JSFIDLE,所以我无法访问链接。你能用附加代码编辑你的问题吗?我对我的答案做了一个小编辑,但不确定你有什么问题…啊,好的,我添加了一些注释…在第一个函数中,我基本上需要返回到名为“fullUrl”的数组的链接。该链接将是当前url+href链接。我认为它工作不正常。