0

我已阅读有关使用Apify SDK抓取网站的优秀文档,但需要一些帮助,因为PuppeteerCrawler的指南尚未完成

我想抓取的网站部分是成员目录。主页(我相信我需要提供 as RequestList)包含指向目录前 50 个成员的链接。要获取接下来的 50 个成员,有一个选项框,如下所示:

<span id="foo">Show:<select onchange="bar.pagerChanged(this);">
<option value="0">1-50</option>
<option value="50">51-100</option>
<option value="100">101-150</option>
...
<option value="2400">2401-2450</option>
</select>
</span>

我不确定我将如何解决这个问题,除了我认为我需要PuppeteerCrawler给定用户输入(单击带有 的选项id="foo")是必需的。我需要做的是从首页开始,将所有 50 个链接添加到 中RequestQueue,然后选择下一批 50 个成员,然后冲洗并重复。

4

1 回答 1

2

我不确定该页面的详细信息,但您可以像这样轻松地使用 Puppeteer 选择任何选项

// First is selector to the select element and second is value of the option
await page.select('#foo select', '50');

在极少数情况下,这不起作用。然后可以通过直接单击选择然后通过简单地使用显示的元素之一来解决

await page.click('#foo select');
await page.waitFor(200);
await page.click('selector-for-on-of-the-element-that-popped-up');

如果每个选项里面都有链接,你可以做简单的lool

const batchSize = 50;
for (let i = 0; i < totalMembers; i += 50) {
    await page.select('#foo select', `${i}`); // i needs to be converted to a string
    const links = extractLinks(); // implement
    for (const url of links) {
        await requestQueue.addRequest({ url });
    }
}
于 2019-07-17T11:33:52.873 回答