简单的网页抓取与木偶师/欢呼器不使用参数



我正在尝试抓取 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

似乎你在request回来之前打电话给callback。将回调调用移动到内部块中,您需要的任务已完成(在您的情况下,它看起来像filter块(。

您似乎也错过了回拨呼叫的()

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

所以这段代码有效....$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()
})()

最新更新