Я строю веб-скребок Ebay как побочный проект, и мне нужно знать, как многократно вызывать функцию, основанную на обещаниях, чтобы получить все товары продавца на нескольких страницах, пока я не достигну конца его товаров.
В основном, используя Javascript и Node.js, если у продавца есть только 1 страница товаров, я очищаю его, и все в порядке.
Для меня все становится сложнее, когда у него несколько страниц, и мне нужновызывать функцию обещания несколько раз и возвращать ссылки на каждую страницу.Я пробовал циклы обещаний, пробовал рекурсию и пробовал async / await.Кажется, ничего не работает.
Я включу фрагмент кода для вас, ребята:
const request = require('request-promise');
const cheerio = require('cheerio');
const options = {
url : 'https://www.ebay.com/sch/i.html?_nkw=&_in_kw=1&_ex_kw=&_sacat=0&_udlo=&_udhi=&_ftrt=901&_ftrv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_sadis=15&_stpos=29582&_sargn=-1%26saslc%3D1&_salic=1&_fss=1&_fsradio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=brickearth&_sop=12&_dmd=1&_ipg=50&_fosrp=1',
//url : 'https://www.ebay.com/sch/i.html?_nkw=&_in_kw=1&_ex_kw=&_sacat=0&_udlo=&_udhi=&_ftrt=901&_ftrv=1&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_sadis=15&_stpos=29582&_sargn=-1%26saslc%3D1&_salic=1&_fss=1&_fsradio=%26LH_SpecificSeller%3D1&_saslop=1&_sasl=supersavingsdeals&_sop=12&_dmd=1&_ipg=200&_fosrp=1',
method : 'GET',
headers : {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
}
const pageLinks = [];
async function getPagesRecursive(link) {
await request(link, (error, response, html) => {
if(!error && response.statusCode === 200) {
const $ = cheerio.load(html);
const nextPage = $('td.pagn-next > a').attr('href');
pageLinks.push(link)
if(nextPage) {
return getPagesRecursive(nextPage);
}
console.log(pageLinks);
}
})
}
Я почти уверен, что это ничего для вас, эксперты Javascript и Node.js;) У меня естьотправил его вам с помощью async / await, но я хотел бы использовать обещания с модулем запроса, так как я чувствую, что знаю их лучше и лично, я безуспешно пробовал любой другой способ :)
У меня естьесли вам, ребята, два URL-адреса, которые нужно попробовать в объекте параметров модуля запроса.Первая - это ссылка на продавца с несколькими элементами, и она должна получить все ссылки на странице.Вторая ссылка - это продавец с одной страницей, и он должен получить только одну ссылку этого продавца.
Заранее спасибо;)