【问题标题】:puppeteer crawler - pagination by clicking on "next" buttonpuppeteer crawler - 通过单击“下一步”按钮进行分页
【发布时间】:2019-11-07 21:05:49
【问题描述】:

我的 Puppeteer 爬虫遇到以下问题: 我正在抓取的网站有结果页面,我们可以通过单击底部页面的箭头导航到下一页(链接没有简单的href,所以我们需要模拟一个点击按钮)。 在每一页上,我都需要抓取所有项目的详细信息(房地产卡/按页计算 30 张卡)。

问题是:如何导航到所有后续页面,并抓取每个页面上的所有卡片?

我做了什么: 在开始 url 上,我填写了一个表单以提交并获得我请求的前 30 个结果。 然后,我在与页面底部箭头匹配的选择器上循环并单击它,直到选择器不存在。 导航有效,但 scraper 无法获取每个页面上卡片的所有链接。所以只有前 30 张卡刮掉,然后刮板停止。

async function pageFunction(context) {

    switch (context.request.userData.label) {
        case 'START': return handleStart(context);
        case 'DETAIL': return handleDetail(context);
    }

    async function handleStart({ log, page, customData }) {
        // fill in form and submit to get the results page
        await page.click(home.submitSearch);
 
        // waiting for some selectors on first results page 
        await page.waitForSelector(searchResults.card);
        await page.waitForSelector(searchResults.blockNavigation);

        // navigate with pagination
        while (await page.$(searchResults.nextPage) !== null) {
           await page.waitForSelector(searchResults.card);
           await page.waitForSelector(searchResults.blockNavigation);
           await page.click(searchResults.nextPage)
        }
    }

    async function handleDetail({ request, log, skipLinks, page }) {
        const description = await page.$eval(descriptionSelector, (el => el.textContent));
        return { description };
    }
}

“START”标签与表单的起始 URL 相匹配。

“详细”标签与结果页面上与一张卡片相关的链接相匹配。

您知道如何处理这种情况吗?

【问题讨论】:

    标签: apify


    【解决方案1】:

    这是网络抓取的典型问题。单击下一步按钮后,它看起来使用一些 XHR 请求来获取更多数据的网站。

    如果不了解网站的结构和运作方式,很难获得一些建议。但是你可以用这两种方法:

    1) 使用网站 XHR 请求获取数据。您可以使用浏览器控制台检查 XHR 请求并将它们复制到您的爬虫中。

    2) 你尝试过的方法。只需等待并单击循环中的下一个按钮。并在没有下一步按钮后获取所有数据。我在您当前的代码中没有看到任何问题,但这取决于您在 puppeteer scraper 中使用的伪 URL 和可点击选择器。如果设置正确,它应该可以工作。

    无论如何,有一个很好的教程来告诉你如何做pagination in puppeteer scraper。你可以去看看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      相关资源
      最近更新 更多