为什么更改搜索关键字会破坏我简单的Puppeteer scraper



程序

这是NodeJS中使用Puppeteer的一个简单的web scraper。我想让它寻找">吉普牧马人";并以JSON形式输出结果。

IPhone X与吉普牧马人

当我使用关键字"运行代码时;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 wrapper";,这就是我需要的结果,我得到了这个。。。

为此查询解析的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();

有人能帮我把这件事做好吗?我已经尝试了我能想到的一切,但不知道是什么打破了这一切。

谢谢你的光临。

约翰·

好吧,要做的一件事是修改捕获,这样你就有了一个错误参数,然后你可以打印出来,这会给你更多的信息,比如:

.catch((err) => console.log("Selector error: "+err));

最新更新