gpt4 book ai didi

node.js - 如何使用 Cheerio 从图表中抓取数据?

转载 作者:搜寻专家 更新时间:2023-11-01 00:48:29 27 4
gpt4 key购买 nike

我正在尝试从聊天中抓取数据,但我不知道如何在 NodeJs 中使用 Cheerio 来做到这一点

我需要获取消息列表的所有昵称(msg-nickname):

enter image description here

到目前为止我有:

server.js

var express = require('express');
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app = express();

app.get('/scrape', function(req, res){

url = 'https://www.nimo.tv/live/6865137196';

request(url, function(error, response, html){
if(!error){
var $ = cheerio.load(html);

var nickname, msg;
var json = { nickname : "", msg : ""};
const messages = [];

$('.msg-nickname',).each(function(i, elem){
console.log(elem);
messages[i] = elem.parent.children.text();
})

console.log($('#chat-room__list').children('msg-wrap').text)


}

app.listen('8081')
console.log('Magic happens on port 8081');
exports = module.exports = app;

每次列表中有新项目时,我还需要更新检查和更新列表。

最佳答案

问题是那部分代码 .msg-nickname 是在客户端生成的。因此,如果您想抓取它,您需要知道数据来自哪个请求,然后执行该请求。

cheerio 只能解析请求响应中的内容。

另一种选择是使用puppeteer,它允许您等待页面完全加载,包括服务器端渲染、ajax 请求...

const puppeteer = require('puppeteer');

(async() => {
const browser = await puppeteer.launch();

const page = await browser.newPage();

await page.goto(url);

// waitForSelector can be added, depending on your needs
// but if there isn't any user, it will wait until it timesout
// which may not be desired
// await page.waitForSelector('.msg-nickname');

const messages = await page.evaluate(() => {
return Array.from(document.querySelectorAll('.msg-nickname'))
.map(item => item.innerText);
});

console.log(messages);
})();

根据昵称的加载方式,您可能需要连接到 page.on('response'),或更改脚本的逻辑,但我将其留给您。

关于node.js - 如何使用 Cheerio 从图表中抓取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55458992/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com