node.js - 在 Node.js 中进行嵌套请求调用

标签 node.js asynchronous web-scraping request async-await

正如标题所示,我正在尝试进行嵌套请求调用,其中第一个请求从页面的 html 中获取 img src,然后将该 src 传递到另一个请求中。

var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');

async function main() {
    for (let i = 1; i < 1061; i++) {
        let url = `https://manuals.co/workshop/volkswagen/corrado/volkswagen-corrado-1990-1994-workshop-manual/5874057/${i}`

        await getSrc(url, i)
    }
}

async function getSrc(uri, j) {
    request(uri, function(error, response, html) {
        let $ = cheerio.load(html)
        const imgSrc = $('.bi.x0.y0.w0.h1').attr("src")
        console.log(imgSrc)
        request(imgSrc).pipe(fs.createWriteStream(`images/test-${j}.png`)).on('close', function() {
            console.log(`Completed image number: ${j}`)
        })
    })
}

main()

当我运行此命令时,“imgSrc”作为“未定义”记录到控制台,并且收到错误:

Error: undefined is not a valid uri or options object.

我尝试按如下方式使用等待:

const imgSrc = await $('.bi.x0.y0.w0.h1').attr("src")

在这种情况下,我在该行收到“意外标识符”错误。 我还将指出,当我单独运行 getSrc 函数(而不是在 for 循环中)时,它会按预期工作。我不知道是什么导致它在放入循环时破裂。

我对 Node.js 和异步编程非常陌生,所以我正在寻找一个可以帮助我理解这些东西工作方式的解决方案。

最佳答案

尝试同步运行它。删除 asyncawait 并查看是否仍然收到该错误。如果您仍然这样做,则可能 $('.bi.x0.y0.w0.h1').attr("src") 确实返回未定义。

关于node.js - 在 Node.js 中进行嵌套请求调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51909912/

相关文章:

node.js - 学习 Node - Express 公共(public)文件夹不工作

android - 将多个文件上传到android中的服务器时的进度条

python - 使用正则表达式从 HTML 中提取所有值

javascript - 开发基于 SIP 的 VOIP 软电话以集成到 Web 应用程序中

node.js - Node-Red:使用 CSV Node

mysql - NodeJS MySQL 异步调用阻止进程退出

C# 异步等待和线程池

python - Scraper Python和YouTube API

html - 如何获取任何 URL 或网页的 Google 缓存年龄?

node.js - 如何为node.js上的监听端口分配域名?