gpt4 book ai didi

javascript - Cheerio 未在 Axios get 请求中加载 HTML - 所有这些都位于异步事件处理程序内

转载 作者:行者123 更新时间:2023-12-02 23:45:44 25 4
gpt4 key购买 nike

我正在研究 Alexa 技能的 intent ,该技能将成为新闻网站的头条新闻。我的代码位于 Node js 中,并托管在 AWS Lambda 上。我使用 axios 和 Cheerio 进行网络抓取,当我从命令行在本地计算机上运行它们时,代码成功检索 HTML,并且 Cheerio 能够获取我需要的数据。但是,当我在 Lambda 上运行代码时,每次我尝试使用 Cheerio 加载 HTML 时,它都会抛出错误。

有趣的是,我尝试使用 Cheerio 加载“html 字符串”,如下所示:

const $ = cheerio.load('<h2 class="title">Hello world</h2>');

我能够使用它并获取 lambda 所需的数据。但是,如果我从 axios 检索 html,并尝试使用 Cheerio 加载该 html,则会抛出错误。这是我调用的电话,但不起作用:

const $ = cheerio.load(response.data);

我的代码如下:

"use strict";
const axios = require('axios');
const cheerio = require('cheerio');
const url = "https://news.ycombinator.com";

const newsHandler = {
"newsIntent": async function () {
var speechOutput = "";

axios.get(url)
.then(response => {
data = [];
const $ = cheerio.load(response.data);
$("table.itemlist tr td:nth-child(3)").each((i, elem) => {
data.push(
$(elem).text().trim()
);
});
for (const headline of data) {
speechOutput += headline + " ";
}
this.emit(":tell", speechOutput);
})
.catch(error => {
console.log(error);
})
}
}

module.exports = newsHandler;

它应该能够解析从 Axios 检索到的 HTML,找到具有所描述的选择器的所有元素,并将它们的文本添加到数据数组中。然而,即使只是写下这一行:

const $ = cheerio.load(response.data);

导致错误。请帮忙!

最佳答案

检查您的 lambda 超时并尝试增加它。

同样的情况也发生在我身上,它正在制作一个带有在 aws lambda 上运行的 Node 的scraper,我遇到的问题是该函数由于超时而结束。

首先我使用JSDOM,然后cheerio使用这两个库,我遇到了同样的问题。

解决方案是增加 lambda 超时(我的只有 3 秒),我将其增加到 10 秒,效果完美。之后,我发现抓取单个 URL 的整个功能大约需要 5 秒。

关于javascript - Cheerio 未在 Axios get 请求中加载 HTML - 所有这些都位于异步事件处理程序内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55859218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com