从请求外部调用请求函数

朱斯廷

我正在尝试制作一个网络爬虫(教育目的),而且我已经走了很远,但是这个小问题困扰着我。

我做了一个请求回调函数,我试图让第 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]));
}

纳约

您可以使用数组的 push 方法将值推送到数组中,从而避免未定义数组的元素。

您可以将最终的 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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在函数外部使用Alamofire请求中的值

来自分类Dev

Scrapy请求-嵌套请求中未调用回调函数

来自分类Dev

通过http请求调用AWS Lambda函数

来自分类Dev

仅在发出多个请求后调用函数

来自分类Dev

在href中调用Ajax请求函数

来自分类Dev

用Chai请求调用异步函数

来自分类Dev

GET请求给出200,但未调用函数

来自分类Dev

基于onchange函数多次调用HTTP请求

来自分类Dev

在每个ajax请求上调用javascript函数

来自分类Dev

在Ajax请求之后调用JavaScript函数

来自分类Dev

通过Ajax请求调用php函数

来自分类Dev

如何调用通过请求后调用的python flask函数?

来自分类Dev

Nodejs-未从成功的请求调用内部调用递归函数

来自分类Dev

通过POST请求调用外部HTTP时,Cloud Functions超时

来自分类Dev

调用外部 API 直到请求被标记为完成

来自分类Dev

模拟外部HTTP请求

来自分类Dev

在“请求”中调用模块的本地函数作为回调

来自分类Dev

计算在Go中调用(请求处理程序)函数的次数

来自分类Dev

jQuery .ajax在发送请求之前调用成功函数

来自分类Dev

node.js请求处理程序不会调用函数

来自分类Dev

如何从JS Axios请求在PHP页面上调用函数

来自分类Dev

在Python上发出发布请求时,如何调用函数?

来自分类Dev

SwiftUI中异步请求完成后如何调用函数?

来自分类Dev

从发出api请求的函数调用中获取响应或错误

来自分类Dev

Ajax请求,如何调用除“成功”之外的其他函数?

来自分类Dev

使用Ajax请求调用PHP函数以更改会话变量

来自分类Dev

ajax获取请求后未调用success()函数

来自分类Dev

在“请求”中调用模块的本地函数作为回调

来自分类Dev

如何在异步请求完成时调用函数-Swift 2.0

Related 相关文章

热门标签

归档