Я создал скрипт в node
, используя promise
в сочетании с request
и cheerio
, чтобы проанализировать столбец links
под Province
из этой веб-страницы и затем использовать ихссылки для очистки всех URL-адресов в столбце Office
от всех таких страниц и, наконец, использования этих links
для сбора title
со всех таких целевых страниц , какв Cairos main Post Office
на этой странице.
Мой текущий скрипт в большинстве случаев застревает.Однако иногда выдает эту ошибку UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'parent' of undefined
.Я проверил каждую из функций и обнаружил, что все они работают правильно по отдельности.
Хотя скрипт выглядит немного больше, он построен на очень простой логике, использующей каждую links
с целевой страницы, пока не достигнет title
целевой страницы.
Это моя попытка:
const request = require('request');
const cheerio = require('cheerio');
const link = 'https://www.egyptcodebase.com/en/p/all';
const base_link = 'https://www.egyptcodebase.com/en/';
const items = [];
const nitems = [];
let getLinks = () => {
return new Promise((resolve, reject) => {
request(link, function(error, response, html) {
let $ = cheerio.load(html);
if (error) return reject(error);
try {
$('.table tbody tr').each(function() {
items.push(base_link + $(this).find("a").attr("href"));
});
resolve(items);
} catch (e) {
reject(e);
}
});
});
};
let getData = (links) => {
const promises = links
.map(nurl => new Promise((resolve, reject) => {
request(nurl, function(error, response, html) {
let $ = cheerio.load(html);
if (error) return reject(error);
try {
$('.table tbody tr').each(function() {
nitems.push(base_link + $(this).find("a").attr("href"));
});
resolve(nitems);
} catch (e) {
reject(e);
}
})
}))
return Promise.all(promises)
}
let FetchData = (links) => {
const promises = links
.map(nurl => new Promise((resolve, reject) => {
request(nurl, function(error, response, html) {
let $ = cheerio.load(html);
if (error) return reject(error);
try {
resolve($(".home-title > h2").eq(0).text());
} catch (e) {
reject(e);
}
})
}))
return Promise.all(promises)
}
getLinks().then(resultList => {
getData(resultList).then(resultSet => {
FetchData(resultSet).then(title =>{
console.log(title);
})
})
})
Какможно ли вычеркнуть заголовки с целевых страниц, используя все ссылки с целевых страниц?