Я работаю над намерением для навыка Alexa, который получит заголовки на новостном сайте.Мой код находится в узле js и размещен на AWS Lambda.Я использую axios и cheerio для просмотра веб-страниц, и когда я запускаю их на своей локальной машине из командной строки, код успешно извлекает HTML, и cheerio может получать нужные мне данные.Однако, когда я запускаю код на Lambda, он выдает ошибку каждый раз, когда я пытаюсь загрузить HTML с cheerio.
Интересно, что я пытался загрузить «строку html» с помощью cheerio следующим образом:
const $ = cheerio.load('<h2 class="title">Hello world</h2>');
, и я смог использовать его и получить необходимые данные о лямбде.Однако, если я получаю html из axios и пытаюсь загрузить его с помощью cheerio, он выдаст ошибку.Это вызов, который я выполняю, который не работает:
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;
Он должен иметь возможность анализировать HTML-код, полученный из Axios, для всех элементовс помощью описанного селектора и добавьте их текст в массив данных.Однако даже простое написание строки:
const $ = cheerio.load(response.data);
вызывает ошибку.Пожалуйста, помогите!