【发布时间】:2019-03-10 16:04:15
【问题描述】:
我正在学习 Puppeteer 并试图抓取一个实现了无限滚动的网站。通过延迟 1 秒后向下滚动,我可以从列表中获取所有价格。 Here is the URL
我想要做的是,从列表中打开一个项目,获取产品名称,返回列表,选择第二个产品并对所有产品执行此操作。
const fs = require('fs');
const puppeteer = require('puppeteer');
function extractItems() {
const extractedElements = document.querySelectorAll('.price');
const items = [];
for (let element of extractedElements) {
items.push(element.innerText);
}
return items;
}
async function scrapeInfiniteScrollItems(
page,
extractItems,
itemTargetCount,
scrollDelay = 1000,
) {
let items = [];
try {
let previousHeight;
while (items.length < itemTargetCount) {
items = await page.evaluate(extractItems);
previousHeight = await page.evaluate('document.body.scrollHeight');
await page.evaluate('window.scrollTo(0, document.body.scrollHeight)');
await page.waitForFunction(`document.body.scrollHeight > ${previousHeight}`);
await page.waitFor(scrollDelay);
}
} catch(e) { }
return items;
}
(async () => {
// Set up browser and page.
const browser = await puppeteer.launch({
headless: false,
args: ['--no-sandbox', '--disable-setuid-sandbox'],
});
const page = await browser.newPage();
page.setViewport({ width: 1280, height: 926 });
// Navigate to the demo page.
await page.goto('https://www.clubfactory.com/views/product.html?categoryId=53&subId=53&filter=%7B%22Price%22%3A%5B%7B%22beg%22%3A1.32%2C%22end%22%3A0%7D%5D%7D');
// Scroll and extract items from the page.
const items = await scrapeInfiniteScrollItems(page, extractItems, 4000);
// Save extracted items to a file.
fs.writeFileSync('./prices3.txt', items.join('\n') + '\n');
// Close the browser.
await browser.close();
})();
感谢任何帮助
【问题讨论】:
标签: node.js web-scraping puppeteer google-chrome-headless