【问题标题】:Puppeteer Web Scraper returning null dataPuppeteer Web Scraper 返回空数据
【发布时间】:2020-11-13 21:30:07
【问题描述】:

我正在使用 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 部分的情况下运行代码,但它仍然无法正常工作。

【问题讨论】:

    标签: javascript node.js puppeteer


    【解决方案1】:

    网络连接的质量是一个不错的猜测。

    在开始抓取之前,您需要等待 DOM 中加载的元素。如果您的网络速度非常快:您将获得成功,否则将无法收集所需的内容。您可以使用page.waitForSelector 确保可以开始抓取。

    await page.goto(url);
    await page.waitForSelector('#meta');
    let songs = await page.evaluate(() => {
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      相关资源
      最近更新 更多