猿问

Puppeteer Web Scraper 返回空数据

我正在用 puppeteer 编写一个程序,它使用以下代码从 youtube 播放列表中获取歌曲标题和艺术家姓名:


await page.goto(url);

let songs = await page.evaluate(() => {

    let results = [];

    let songTitle, songArtist;

    let elements = document.querySelectorAll('#meta');

    elements.forEach(el => {

        songTitle = el.querySelector('h4');

        songArtist = el.querySelector('#byline');

        if (songTitle) {

            results.push({

                title: songTitle.textContent,

                artist: songArtist.textContent

            });

        }

    });

    return results;

});

songs.forEach(song => {

    song.title = song.title.trim();

    song.artist = song.artist.trim();

});

songs.sort((a,b) => a.artist > b.artist ? 1 : -1);

console.table(songs);


变量 url 是指向包含 8 首歌曲的 youtube 播放列表的链接。我以前用那个播放列表和其他播放列表运行过这个程序,它运行良好。然而,过去几天它一直在返回一个空白表,即使我没有修改这段代码。我在与 spotify 网络播放器一起使用的末尾添加了更多代码,但这不应该影响我已经编写的代码,并且其中一些代码在 YouTube 部分停止工作之前已经存在。


是我写的代码有问题,还是我wifi的问题?


编辑:我尝试在注释掉 Spotify 部分的情况下运行代码,但它仍然无法正常工作。


蓝山帝景
浏览 81回答 1
1回答

幕布斯7119047

网络连接的质量是一个很好的猜测。在开始抓取之前,您需要等待 DOM 中加载的元素。如果您的网络速度极快:您就会成功,否则它不会收集到您想要的内容。您可以使用page.waitForSelector以确保可以开始抓取。await page.goto(url);await page.waitForSelector('#meta');let songs = await page.evaluate(() => {...
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答