如何使用Cheerio获取页面的特定部分

时间:2019-09-04 12:35:12

标签: node.js discord.js cheerio steam

因此,我正在尝试创建一个discordbot,以便每x次检查某人的愿望清单上是否有某款游戏在出售。但是我无法让cheerio阅读页面的某些属性。例如,如果我登录“ .wishlist_row”,它将为空。另外,当我尝试记录整个页面的文本时,它不会记录游戏的名称和价格...我该如何抓取这些数据?

我已经尝试过了:

console.log("Starting to log Steam wishlists updates!")
    setInterval(function () {
        request("https://store.steampowered.com/wishlist/id/myusername/#sort=order", async (error, response, html) => {
    if (!error && response.statusCode === 200) {
        const $ = cheerio.load(html);
        console.log($('.wishlist_row').text())
            $('.wishlist_row').each((i, element) => {
                console.log($(element).find('.discount_pct'))
            })
        }
    })
}, 1000)

1 个答案:

答案 0 :(得分:1)

不幸的是,Cheerio可以从网页的源代码中读取内容,但是无法渲染JavaScript来创建您在浏览器中看到的完整体验。

在浏览器中查看某人的愿望清单时看到的愿望清单元素是从其他地方获取并使用JavaScript呈现的,因此无法通过抓取页面的源代码获得此类信息。

但是,Steam确实提供了一个公共API,您可以调用该API以在以下位置获取此数据 https://store.steampowered.com/wishlist/id/{myusername}/wishlistdata/?p=0

使用此API,您可以像这样访问每个游戏的当前折扣百分比:

console.log("Starting to log Steam wishlists updates!")
    setInterval(function () {
        request("https://store.steampowered.com/wishlist/id/{myusername}/wishlistdata/?p=0", (error, response) => {
            if (!error && response.statusCode === 200) {
                let wishlist = JSON.parse(response.body);

                for (let appid in wishlist) {
                    console.log(wishlist[appid]); // game information
                    console.log(wishlist[appid].subs[0].discount_pct); // discount percentage
                }
            }
        });
}, 1000);