为了账号安全,请及时绑定邮箱和手机立即绑定

Puppeteer Web Scraper 返回空数据

Puppeteer Web Scraper 返回空数据

蓝山帝景 2022-12-02 10:38:26
我正在用 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 部分的情况下运行代码,但它仍然无法正常工作。
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

网络连接的质量是一个很好的猜测。

在开始抓取之前,您需要等待 DOM 中加载的元素。如果您的网络速度极快:您就会成功,否则它不会收集到您想要的内容。您可以使用page.waitForSelector以确保可以开始抓取。

await page.goto(url);

await page.waitForSelector('#meta');

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

...


查看完整回答
反对 回复 2022-12-02
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信