【发布时间】:2021-10-29 19:19:40
【问题描述】:
我正在尝试从网页中列出的不同公司中抓取三个字段。这里的想法是利用这个webpage,从着陆页解析不同公司的内页链接,最后从详情页中抓取title,phone和email。我创建的脚本可以毫无问题地执行此操作。
但是,我也希望从下一页 (Next) 中抓取内容。由于我对节点很陌生,如果有人可以帮助我在下面的脚本中实现抓取下一页的逻辑,我将不胜感激。
const puppeteer = require("puppeteer");
const base = "https://www.timesbusinessdirectory.com";
const url = "https://www.timesbusinessdirectory.com/company-listings";
(async () => {
const browser = await puppeteer.launch({headless:false});
const [page] = await browser.pages();
await page.goto(url,{waitUntil: 'networkidle2'});
page.waitForSelector(".company-listing");
const sections = await page.$$(".company-listing");
let data = [];
for (const section of sections) {
const itemName = await section.$eval("h3 > a", el => el.getAttribute("href"));
data.push(itemName);
}
let itmdata = [];
for (const link of data) {
const newlink = base.concat(link);
await page.goto(newlink,{waitUntil: 'networkidle2'});
page.waitForSelector(".company-details");
const result = await page.$$(".company-details");
for (const itmres of result) {
const company = await itmres.$eval("h3", el => el.textContent);
const phone = await itmres.$eval("#valuephone a[href]", el => el.textContent);
const email = await itmres.$eval("a[onclick^='showCompanyEmail']", el => el.getAttribute("onclick"));
console.log({
title: company,
tel : phone.trim(),
emailId : email.split("('")[1].split("',")[0]
});
}
}
await browser.close();
})();
如何在脚本中实现遍历下一页的逻辑?
编辑:
我试图在the script 中使用下一页链接迭代地定义while loop。然而,这一次脚本似乎根本没有响应。也许我做错了什么。
【问题讨论】:
标签: javascript node.js web-scraping puppeteer