【问题标题】:How can I let a script parse content from next pages?如何让脚本解析下一页的内容?
【发布时间】:2021-10-29 19:19:40
【问题描述】:

我正在尝试从网页中列出的不同公司中抓取三个字段。这里的想法是利用这个webpage,从着陆页解析不同公司的内页链接,最后从详情页中抓取title,phoneemail。我创建的脚本可以毫无问题地执行此操作。

但是,我也希望从下一页 (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


    【解决方案1】:

    在您当前的代码中,您在每次迭代中声明新的url 变量。取而代之的是,您需要将外部 url 变量声明为 let 并重新定义它:

    let url = "https://www.timesbusinessdirectory.com/company-listings";
    // ...
            url = base.concat(nextPageLink);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 2012-08-19
      • 1970-01-01
      相关资源
      最近更新 更多