使用操纵符/ cheerio进行简单的Web抓取不适用于params

时间:2019-08-11 18:14:19

标签: node.js web-scraping cheerio

我正在尝试刮擦https://www.premierleague.com/clubs/38/Wolverhampton-Wanderers/stats?se=274 返回的结果是页面减去?se = 274的结果 这是通过使用页面上的过滤器下拉列表并选择2019/20赛季来应用的。我可以直接导航到页面,它可以正常工作,但是通过代码却无法正常工作。

我曾尝试过在麦当劳和木偶戏中表演。我也打算尝试噩梦,但是我认为这似乎有些过头了。我显然不是专家! ;)

function getStats(callback){
    var url = "https://www.premierleague.com/clubs/38/Wolverhampton-Wanderers/stats?se=274";

    request(url, function (error, response, html) {
        //console.log(html);

        var $ = cheerio.load(html); 

        if(!error){
            $('.allStatContainer.statontarget_scoring_att').filter(function(){
                var data = $(this);
                var vSOT = data.text();

                //console.log(data);
                console.log(vSOT);

            });
        }
    });
    callback;
}

这将返回564而不是2

2 个答案:

答案 0 :(得分:0)

似乎您在callback返回之前正在呼叫request。将回调调用移到内部块中,您需要完成的任务(在您的情况下,看起来像filter块)。

看起来您在回叫电话上也缺少()

另外,建议:通过回调返回所需的值。

答案 1 :(得分:0)

因此,此代码有效。...从租来的编码器中花10美元就可以了。当您知道如何时就很容易!

const puppeteer = require('puppeteer');

(async () => {

    const browser = await puppeteer.launch()

    const page = await browser.newPage()

    await page.goto('https://www.premierleague.com/clubs/4/Chelsea/stats?se=274')

    const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))

    await sleep(4000)

    const element = await page.$(".allStatContainer.statontarget_scoring_att");
    const text = await page.evaluate(element => element.textContent, element);

    console.log("Shots on Target:"+text)

    browser.close()

})()