【发布时间】: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