【发布时间】:2021-05-01 04:21:54
【问题描述】:
我在 youtube 上尝试使用 puppeteer,我试图从 youtube 主页的缩略图中抓取 URL src 和标题文本,并且抓取程序运行良好。问题是当它抓取缩略图的标题和 src 时,程序在记录 URL src 时开始跳行,但它适用于文本数据。当我试图了解行跳转递归性时,每次程序抓取信息后,都会有 7 行跳转,然后一次又一次地跳转 14 行。我无法弄清楚为什么在抓取 URL src 而不是文本标题时会发生换行。和我的无限滚动处理方法有关系吗?
async function scrape(url) {
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.setViewport({
width: 1200,
height: 800
});
const navigationPromise = page.waitForNavigation();
await page.goto(url, {
timeout: 0
});
await page.evaluate(_ => {
window.scrollBy(0, window.innerHeight);
});
await page.waitFor(5000);
await page.waitForSelector('#img')
await navigationPromise;
const loadThumbnailText = [];
const loadThumbnailSrc = [];
var ytTextData;
for (let i = 0; i < 50; i++) {
const textSelector = 'h3 > a > #video-title'
const srcSelector = 'ytd-thumbnail > a > yt-img-shadow > #img'
await page.waitForSelector(textSelector)
await page.waitForSelector(srcSelector)
const ytTextData = await page.$$eval(textSelector, elems => elems.map(el => el.textContent).join('\n'))
const ytSrcData = await page.$$eval(srcSelector, elems => elems.map(el => el.src).join('\n'))
if (ytTextData && ytSrcData) {
console.log({
ytTextData,
ytSrcData
})
loadThumbnailText.push(ytTextData);
loadThumbnailSrc.push(ytSrcData);
console.log(ytTextData, ytSrcData)
}
}
browser.close();
}
【问题讨论】:
标签: javascript puppeteer