Я пытаюсь удалить страницу википедии, чтобы получить список авиакомпаний, сначала удалив первую страницу, а затем перейдя на каждую отдельную страницу авиакомпании, чтобы получить URL-адрес веб-сайта. Я разделил код на две функции. Одна для удаления главной страницы и получения нового URL-адреса, а вторая функция для удаления другой страницы из созданного URL-адреса, чтобы получить имя веб-сайта с этой страницы. Я использовал модуль запроса-обещания для получения html, а затем cheerio для анализа данных.
export async function getAirlinesWebsites(req,res) {
let response = await request(options_mainpage);
console.log(`Data`);
let $ = cheerio.load(response);
console.log('Response got');
$('tr').each((i,e)=>{
let children = '';
console.log('inside function ', i);
if($(e).children('td').children('a').attr('class') !== 'new') {
children = $(e).children('td').children('a').attr('href');
let wiki_url = 'https://en.wikipedia.org' + children;
console.log(`wiki_url = ${wiki_url}`);
let airline_url = getAirlineUrl(wiki_url);
console.log(`airline_url = ${airline_url}`);
}
})
И затем функция getAirlineUrl() будет анализировать другую страницу на основе предоставленного URL-адреса.
async function getAirlineUrl(url){
const wiki_child_options = {
url : url,
headers : headers
}
let child_response = await request(wiki_child_options);
let $ = cheerio.load(child_response);
let answer = $('.infobox.vcard').children('tbody').children('tr').children('td').children('span.url').text();
return answer;
})
Однако, когда я консольно регистрирую переменную ответа в родительской функции, я получаю значение [object Promise] вместо строки. Как решить эту проблему?
span.url
с запросом где-то еще в коде, но запросы асинхронны, и этот возвращает обещание, поэтому, где бы вы ни устанавливали текстspan.url
, делайте это в успешном обратном вызове обещания , не устанавливайте его в значение обещания. Обещание MDN, расширяя то, что я имею в виду установив обещание, это выглядит как$(..).text(someReq()); function someReq() { ... return promise; }
- person Patrick Barr   schedule 26.07.2017