publicGoodsPwRouter.addHandler('PUBLIC_GOODS_PRODUCT', async ({ page, request }) => {
try {
console.log('Scraping products');
const site = 'Public Goods';
const title = await page.$eval('h1.ProductMeta__Title.Heading.aos-init.aos-animate', (el) => el.textContent?.trim() || '');
const descriptions = await page.$$eval('div.ProductMeta__Description--metafields.aos-init.aos-animate p', (paragraphs) => {
return paragraphs.map((p) => p.textContent?.trim());
});
let originalPrice = '';
try {
originalPrice = await page.$eval('span.ProductMeta__Price.Price.Price--compareAt.Text--subdued', (el) => el.textContent?.trim() || '');
} catch (error) {
console.log('Error retrieving original price:', error);
// Handle the error or set a default value for originalPrice
originalPrice = 'N/A';
}
const salePrice = await page.$eval('span.ProductMeta__Price.Price.Text--subdued', (el) => el.textContent?.trim() || '');
const shippingInfo = await page.$$eval('div#tab-4 div.product-description.rte p', (paragraphs) => {
return paragraphs.map((p) => p.textContent?.trim());
});
const reviewScore = await page.$eval('span.sr-only', (el) => el.textContent?.trim() || '');
const reviewNumber = await page.$eval('a.text-m', (el) => el.textContent?.trim() || '');
const productData = {
url: request.loadedUrl,
site,
title,
descriptions,
originalPrice,
salePrice,
shippingInfo,
reviewScore,
reviewNumber,
};
productList.push(productData);
....
} catch (error) {
console.log('Error scraping product:', error);
publicGoodsPwQueue.reclaimRequest(request);
return
}
});
publicGoodsPwRouter.addHandler('PUBLIC_GOODS_PRODUCT', async ({ page, request }) => {
try {
console.log('Scraping products');
const site = 'Public Goods';
const title = await page.$eval('h1.ProductMeta__Title.Heading.aos-init.aos-animate', (el) => el.textContent?.trim() || '');
const descriptions = await page.$$eval('div.ProductMeta__Description--metafields.aos-init.aos-animate p', (paragraphs) => {
return paragraphs.map((p) => p.textContent?.trim());
});
let originalPrice = '';
try {
originalPrice = await page.$eval('span.ProductMeta__Price.Price.Price--compareAt.Text--subdued', (el) => el.textContent?.trim() || '');
} catch (error) {
console.log('Error retrieving original price:', error);
// Handle the error or set a default value for originalPrice
originalPrice = 'N/A';
}
const salePrice = await page.$eval('span.ProductMeta__Price.Price.Text--subdued', (el) => el.textContent?.trim() || '');
const shippingInfo = await page.$$eval('div#tab-4 div.product-description.rte p', (paragraphs) => {
return paragraphs.map((p) => p.textContent?.trim());
});
const reviewScore = await page.$eval('span.sr-only', (el) => el.textContent?.trim() || '');
const reviewNumber = await page.$eval('a.text-m', (el) => el.textContent?.trim() || '');
const productData = {
url: request.loadedUrl,
site,
title,
descriptions,
originalPrice,
salePrice,
shippingInfo,
reviewScore,
reviewNumber,
};
productList.push(productData);
....
} catch (error) {
console.log('Error scraping product:', error);
publicGoodsPwQueue.reclaimRequest(request);
return
}
});