我在node
中创建了一个与puppeteer
结合使用的脚本,以便从网站的目标网页上抓取不同帖子的链接,我的脚本正在完美地完成这项工作。虽然该网站的内容是静态的,但我使用木偶操作员来看看它是如何表现的,因为我对此非常陌生。
我现在要做的是利用这些链接来遍历不同的页面,重用相同的浏览器而不从新页面中删除任何内容。但是,我无法修改我的脚本以反映相同的内容。
到目前为止,这是我的尝试:
const puppeteer = require("puppeteer");
(async () => {
const browser = await puppeteer.launch({headless:false});
const [page] = await browser.pages();
await page.goto("https://stackoverflow.com/questions/tagged/web-scraping");
page.waitFor(".summary");
const sections = await page.$$(".summary");
let data = [];
for (const section of sections) {
const itemName = await section.$eval(".question-hyperlink", el => el.href);
data.push(itemName);
}
browser.close();
return data;
})();
我如何纠正我的脚本,以便它重用相同的浏览器来遍历新收集的链接?
在关闭浏览器之前,您可以重用已收集链接的现有页面并对其进行迭代:
const puppeteer = require("puppeteer");
(async () => {
const browser = await puppeteer.launch({headless:false});
const [page] = await browser.pages();
await page.goto("https://stackoverflow.com/questions/tagged/web-scraping");
page.waitFor(".summary");
const sections = await page.$$(".summary");
let data = [];
for (const section of sections) {
const itemName = await section.$eval(".question-hyperlink", el => el.href);
data.push(itemName);
}
// iterate over the URLs
for (const url of data) {
await page.goto(url);
}
await browser.close();
return data;
})();
const puppeteer = require("puppeteer");
async function crawlUrls(data, page) {
for (const url of data) {
await page.goto(url);
}
}
(async () => {
// ...
// iterate over the URLs
await crawlUrls(data, page);
// ...
})();