从请求外部调用请求函数
Call a Request function from outside the request
我正在尝试制作一个 webscraper(教育用途),而且我做得很远,但是这个小问题困扰着我。
我创建了一个请求回调函数,我正在尝试让第 75-78 行正常工作。然而,为了让它工作,我需要 PDF_LISTS 和 PDF_LINKS 来初始化正确的值。
我已经尝试让它们成为全局变量,但由于某种原因不起作用。所以我的问题是:如何创建一个回调函数来调用 for 循环 (75-78) 并成功将 PDF_LISTS 和 PDF_LINKS 初始化为正确的值?
(别担心,我在教授的许可下将其用于教育内容)。第一次在这里发帖!
// URL_LINKS has the pdf links of the pages
PDF_LINKS = [];
// URL_LIST has the names of the pdf links
PDF_LIST = [];
function fillPDF(callback) {
request(url, function(err, res, body) {
$ = cheerio.load(body);
links = $('a'); //jquery get all hyperlinks
$(links).each(function(i, link) {
var value = $(link).attr('href');
// creates objects to hold the file
if (value.substring(value.length - 3, value.length) == "pdf") {
PDF_LINKS[i] = $(link).attr('href');
PDF_LIST[i] = $(link).text();
}
})
});
}
// must decleare fillPDF variable or else you wont initilze teh variables
fillPDF() {
//HERE I WANT PDF_LINKS and PDF_LIST to be intialized to 33.....
}
for (j = 0; j < PDF_LIST.length; j++) {
request(PDF_LINKS[j]).pipe(fs.createWriteStream(PDF_LIST[j]));
}
您可以使用 array's push method 将您的值推送到数组中,避免数组的元素未定义。
您可以将最终的 for 循环放入函数中,然后使用 fillPDF();
您还需要在请求结束后调用 fillPDF 的回调。
PDF_LINKS = [];
PDF_LIST = [];
function fillPDF(callback) {
request(url, function(err, res, body) {
$ = cheerio.load(body);
links = $('a');
$(links).each(function(i, link) {
var value = $(link).attr('href');
if (value.slice(-3) == "pdf") {
PDF_LINKS.push(value);
PDF_LIST.push($(link).text());
}
})
callback();
});
}
function writePDF() {
for (j = 0; j < PDF_LIST.length; j++) {
request(PDF_LINKS[j]).pipe(fs.createWriteStream(PDF_LIST[j]));
}
}
fillPDF(writePDF);
我正在尝试制作一个 webscraper(教育用途),而且我做得很远,但是这个小问题困扰着我。
我创建了一个请求回调函数,我正在尝试让第 75-78 行正常工作。然而,为了让它工作,我需要 PDF_LISTS 和 PDF_LINKS 来初始化正确的值。
我已经尝试让它们成为全局变量,但由于某种原因不起作用。所以我的问题是:如何创建一个回调函数来调用 for 循环 (75-78) 并成功将 PDF_LISTS 和 PDF_LINKS 初始化为正确的值?
(别担心,我在教授的许可下将其用于教育内容)。第一次在这里发帖!
// URL_LINKS has the pdf links of the pages
PDF_LINKS = [];
// URL_LIST has the names of the pdf links
PDF_LIST = [];
function fillPDF(callback) {
request(url, function(err, res, body) {
$ = cheerio.load(body);
links = $('a'); //jquery get all hyperlinks
$(links).each(function(i, link) {
var value = $(link).attr('href');
// creates objects to hold the file
if (value.substring(value.length - 3, value.length) == "pdf") {
PDF_LINKS[i] = $(link).attr('href');
PDF_LIST[i] = $(link).text();
}
})
});
}
// must decleare fillPDF variable or else you wont initilze teh variables
fillPDF() {
//HERE I WANT PDF_LINKS and PDF_LIST to be intialized to 33.....
}
for (j = 0; j < PDF_LIST.length; j++) {
request(PDF_LINKS[j]).pipe(fs.createWriteStream(PDF_LIST[j]));
}
您可以使用 array's push method 将您的值推送到数组中,避免数组的元素未定义。
您可以将最终的 for 循环放入函数中,然后使用 fillPDF();
您还需要在请求结束后调用 fillPDF 的回调。
PDF_LINKS = [];
PDF_LIST = [];
function fillPDF(callback) {
request(url, function(err, res, body) {
$ = cheerio.load(body);
links = $('a');
$(links).each(function(i, link) {
var value = $(link).attr('href');
if (value.slice(-3) == "pdf") {
PDF_LINKS.push(value);
PDF_LIST.push($(link).text());
}
})
callback();
});
}
function writePDF() {
for (j = 0; j < PDF_LIST.length; j++) {
request(PDF_LINKS[j]).pipe(fs.createWriteStream(PDF_LIST[j]));
}
}
fillPDF(writePDF);