Программа
Это простой веб-скребок в NodeJS, использующий Кукольник . Я хочу, чтобы он искал " Jeep Wranglers " и выводил результаты в JSON.
IPhone X против Jeep Wrangler
Когда я запускаю код используя ключевое слово "IPhoneX", он работает отлично! Мне представлены следующие результаты:
URL, разрешенный для этого запроса:
https://www.facebook.com/marketplace/jacksonville/search/?query=IPhone%20X
[
{
itemTitle: 'iPhone X (64gb) Unlocked',
itemPrice: null,
itemURL: 'https://facebook.com//marketplace/item/660933184466809/',
itemImg: 'https://scontent-mia3-2.xx.fbcdn.net/v/t1.0-0/c0.2.261.261a/p261x260/95204129_555831935070812_4787210156310003712_o.jpg?_nc_cat=109&_nc_sid=843cd7&_nc_oc=AQlwXNEAvJyUsehdWQc3Sazu8yPFLt4-UenwazHfKoUHQgFk2Y0IMxFLNVOM9Ufkixk&_nc_ht=scontent-mia3-2.xx&oh=73a71c8d46087a03222be9d8ccec20e2&oe=5ED06145'
},
{
itemTitle: 'iPhone Xs 64gb Unlocked Space Gray',
itemPrice: null,
itemURL: 'https://facebook.com//marketplace/item/235068041103141/',
itemImg: 'https://scontent-mia3-2.xx.fbcdn.net/v/t1.0-0/c0.29.261.261a/p261x260/94617759_1443663249148648_6414747198054989824_o.jpg?_nc_cat=105&_nc_sid=843cd7&_nc_oc=AQmCvaqKMfBLRiJGlN4xzNc5M8ppYEuLQDYZ6-FQalHWfPb0Wh1VMdyPzFmiHLbEyZI&_nc_ht=scontent-mia3-2.xx&oh=854a856849d7323229b1b5b927245811&oe=5ECE0F49'
}
]
но .. Когда я изменяю ключевое слово на «Jeep Wrangler», что является результатом, который мне нужен, мне предоставляется следующий ...
URL-адрес, разрешенный для этого запроса:
https://www.facebook.com/marketplace/jacksonville/search/?query=jeep%20wrangler
Selector error.
undefined
Я потратил много времени, пытаясь понять это, но безуспешно.
Источник
const puppeteer = require('puppeteer');
const getItems = async searchTerm => {
//{headless: false, defaultViewport: null} --> put this in launch() method below as parameter for developtment purposes --> opens up browser window
const browser = await puppeteer.launch({headless: false, defaultViewport: null});
const page = await browser.newPage();
await page.goto(`https://facebook.com/marketplace/search/?query=${encodeURI(searchTerm)}`);
const itemList = await page.waitForSelector('div > div > span > div > a[tabindex="0"]')
.then(() => page.evaluate(() => {
const itemArray = [];
const itemNodeList = document.querySelectorAll('div > div > span > div > a[tabindex="0"]');
itemNodeList.forEach(item => {
const itemTitle = item.querySelector('div > div > span > div > a > div > div > div > span > div > span > div[class="l9j0dhe7 stjgntxs ni8dbmo4"').innerText;
const itemPrice = item.querySelector('div > div > span > div > a > div > div > div > div > span[class="oi732d6d ik7dh3pa d2edcug0 qv66sw1b c1et5uql a8c37x1j s89635nw ew0dbk1b a5q79mjw g1cxx5fr lrazzd5p oo9gr5id"').innerText;
const itemURL = `https://facebook.com/${item.getAttribute('href')}`;
const itemImg = item.querySelector('div > div > span > div > a > div > div > div > div > div > div > img').getAttribute('src');
itemArray.push({itemTitle, itemPrice, itemURL, itemImg});
});
return itemArray;
}))
.catch(() => console.log("Selector error."));
return itemList;
}
const initScraper = async() => {
const items = await getItems('jeep wrangler');
console.log(items);
}
initScraper();
Может Кто-нибудь помочь мне заставить это работать? Я перепробовал все, что мог придумать, и понятия не имею, что его нарушает.
Спасибо, что посмотрели.
Джон