js noob здесь,
Я пытаюсь создать веб-скребок для удаления ценовых данных с сайтов бронирования, но я не могу получить нужные данные, по крайней мере, не каждый раз.
Я тестирую этот конкретный URL:
https://www.trivago.fr/?aDateRange%5Barr%5D=2019-10-09&aDateRange%5Bdep%5D=2019-10-10&aPriceRange%5Bfrom%5D=0&aPriceRange%5Bto%5D=0&iRoomType=7&aRooms%5B0%5D%5Badults%5D=2&cpt2=22748%2F200&iViewType=0&bIsSeoPage=0&sortingId=1&slideoutsPageItemId=&iGeoDistanceLimit=20000&address=&addressGeoCode=&offset=0&ra=
Это то, что я получаю 1 из 20 попыток:
{ prices:
[ 'Prix / nuit',
'Hébergement',
'Avis',
'Emplacement',
'Autres',
'max. 500€+',
'Bien',
'108€',
'Bien',
'112€',
'Excellent',
'98€',
'Très bien',
'122€',
'Très bien',
'164€',
'Excellent',
'156€',
'Très bien',
'97€',
'Très bien',
'160€',
'Très bien',
'155€',
' ',
'87€',
'Excellent',
'134€',
'Très bien',
'155€',
' ',
'92€',
'Excellent',
'135€',
'Très bien',
'135€',
'Excellent',
'94€',
' ',
'82€',
'Très bien',
'98€',
'Excellent',
'99€',
'Bien',
'110€',
'Bien',
'141€',
' ',
'80€',
'Très bien',
'136€',
'Excellent',
'122€',
'Excellent',
'232€',
'1',
'trivago N.V.' ] }
и это то, что яполучить большую часть времени:
{ prices:
[ 'Prix / nuit',
'Hébergement',
'Avis',
'Emplacement',
'Autres',
'max. 500€+',
'trivago N.V.' ] }
Мне сказали, что это может иметь какое-то отношение к скорости, с которой данные собираются, код завершится до того, как все данные будут получены
код:
const puppeteer = require('puppeteer');
let cheerio = require('cheerio');
let jsonframe = require('jsonframe-cheerio');
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port);
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
let frame;
await page.goto('https://www.trivago.fr/?aDateRange%5Barr%5D=2019-10-09&aDateRange%5Bdep%5D=2019-10-10&aPriceRange%5Bfrom%5D=0&aPriceRange%5Bto%5D=0&iRoomType=7&aRooms%5B0%5D%5Badults%5D=2&cpt2=22748%2F200&iViewType=0&bIsSeoPage=0&sortingId=1&slideoutsPageItemId=&iGeoDistanceLimit=20000&address=&addressGeoCode=&offset=0&ra=');
let bodyHTML = await page.evaluate(() => document.body.innerHTML).then(frame = {"prices": ["strong"]});
let $ = cheerio.load(bodyHTML);
jsonframe($);
var postsList = $('body').scrape(frame);
console.log(postsList);
await browser.close();
})();