我已经阅读了有关使用Apify SDK来爬网网站的出色文档,但是由于 PuppeteerCrawler 的指南尚未完成
,因此需要一点帮助。我要抓取的网站部分是成员目录。主页(我相信我需要以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个成员,然后冲洗并重复。
答案 0 :(得分:1)
我不确定页面的详细信息,但是您可以像这样通过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');
如果每个选项中都有链接,则可以简单地大声笑
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 });
}
}