使用 Nodejs 实时抓取聊天记录

2023-12-01

我想做的是建立一个scrapingNodeJs 上的应用程序,它可以实时监控聊天并将某些消息存储在任何数据库中?

我想做的是以下内容,我想从聊天平台流中捕获数据,从而捕获一些有用的信息来帮助那些正在做流媒体服务的人;

但我不知道如何开始使用 NodeJs 来做到这一点,

到目前为止,我所能做的就是捕获消息的数据,但是我无法监控实时新消息, 在这方面有什么帮助吗?

到目前为止我做了什么:

服务器.js

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

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

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

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

        const page = await browser.newPage();
        await page.goto(url);
        await page.waitForSelector('.msg-nickname');

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

        console.log(messages);
    })();
    res.send('Check your console!')

});

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

这样,我获取用户消息的昵称并将其放入一个数组中,我想让我的应用程序运行并在聊天中完成输入时自动接收新的昵称, 对这个挑战有什么帮助吗?

也许我需要使用 WebSocket


如果可能的话你应该使用API​​,聊天正在使用。尝试打开 Chrome 开发者工具中的网络选项卡,并尝试找出正在发生哪些网络请求。


如果这不可能,您可以使用MutationObserver监控 DOM 变化。通过以下方式公开函数page.exposeFunction然后听取相关变化。然后您可以将获得的数据插入数据库。

下面是一些可以帮助您入门的示例代码:

const puppeteer = require('puppeteer');
const { Client } = require('pg');

(async () => {
    const client = new Client(/* ... */);
    await client.connect(); // connect to database

    const browser = await puppeteer.launch({ headless: false });
    const [page] = await browser.pages();

    // call a handler when a mutation happens
    async function mutationListener(addedText) {
        console.log(`Added text: ${addedText}`);

        // insert data into database
        await client.query('INSERT INTO users(text) VALUES($1)', [addedText]);
    }
    page.exposeFunction('mutationListener', mutationListener);

    await page.goto('http://...');
    await page.waitForSelector('.msg-nickname');

    await page.evaluate(() => {
        // wait for any mutations inside a specific element (e.g. the chatbox)
        const observerTarget = document.querySelector('ELEMENT-TO-MONITOR');
        const mutationObserver = new MutationObserver((mutationsList) => {
            // handle change by checking which elements were added and which were deleted
            for (const mutation of mutationsList) {
                const { removedNodes, addedNodes } = mutation;
                // example: pass innerText of first added element to our mutationListener
                mutationListener(addedNodes[0].innerText);
            }
        });
        mutationObserver.observe( // start observer
            observerTarget,
            { childList: true }, // wait for new child nodes to be added/removed
        );
    });
})();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Nodejs 实时抓取聊天记录 的相关文章

  • 使用 dnode 从服务器向客户端发送消息

    几个月前 我发现了 nowjs 和 dnode 并最终使用了 nowjs 并且https github com Flotype nowclient https github com Flotype nowclient 用于客户端 服务器双向
  • 未处理的拒绝:发送后无法设置标头

    我正在 Dialogflow 中创建一个聊天机器人 当我尝试将数据添加到数据库时 它抛出了 未处理的拒绝 错误 这是我的index js文件 use strict const functions require firebase funct
  • 从 Node.js 调用 execl、execle、execlp、execv、execvP 或 execvp 的方法

    POSIX 系统公开了一系列exec函数 允许人们将可能不同的东西加载到当前进程中 保留打开的文件描述符 进程标识符等 可以出于多种原因执行此操作 在我的情况下 这是引导 我想更改我自己的进程的命令行选项 然后在现有进程上重新加载它 这样就
  • 返回旧的(m,文件名);错误 [ERR_REQUIRE_ESM]:ES 模块的 require()

    我正在尝试与 unsplash api 进行集成 但我得到了 当我尝试通过 ts node 运行脚本时 如下所示 ts node unsplash ts 有错误 C Users USER AppData Roaming npm node m
  • Firebase 连接管理器应仅返回一个结果

    我正在关注位于以下位置的文档 https www firebase com docs ios guide offline capability html section connection state https www firebase
  • Node.js es6 使用index.js 导出/导入

    我有以下文件夹结构 src index js lib test js dist examples example js src lib test js export default class Test src index js impor
  • 路径中包含空格的 Firestore 安全规则

    我需要为名为 测试用例 的子集合创建一个 firestore 规则 由于 firestore 规则不是用 javascript 编写的 因此我似乎无法在匹配后获取路径来接受空格而不会出现错误 我尝试过引号 转义字符的反斜杠 以及将整个路径放
  • 如何按单个整数字段对 JSON 进行排序? [复制]

    这个问题在这里已经有答案了 我有以下 JSON title title order 0 order 9 order 2 JSON 包含很多字段 我如何根据字段对它们进行排序order field 我一直在寻找 Nodejs 中内置的东西 但
  • 在 AWS Lambda 中共享代码

    在 AWS Lambda 函数之间共享代码的首选方式是什么 我有这样的结构 functions a 节点模块 index js 包 json b 节点模块 index js 包 json c 节点模块 index js 包 json 这让每
  • 角度2多次错误TS2300:重复的标识符

    系统配置 ubuntu 14 04 节点 v gt v5 6 0 npm v gt 3 7 1 打字最新版本 不知道如何获取版本详细信息 第一次使用 angular2 时 我的文件夹样本 服务器结构如下 server js server t
  • 在 Node.js 中以事务方式写入文件

    我有一个 Node js 应用程序 它将一些配置数据存储在文件中 如果更改某些设置 配置文件将写入磁盘 目前 我正在使用一个简单的fs writeFile 现在我的问题是 当 Node js 在写入文件时崩溃时会发生什么 磁盘上是否有可能存
  • AWS Lambda - Nodejs 函数不会返回数据

    我是 NodeJS 函数调用的新手 我已经在屏幕上敲了几个小时了 我所有的谷歌搜索都没有帮助 所以我有一个 AWS Lambda 函数 它接收一个带有单个 ID 号的 JSON 对象 该 ID 号将被传递并最终作为 myid 发送到 get
  • 从 Firestore 获取文档时,我是否也获取该文档内的集合?

    如果是的话 如何获得它 因为在进行文档引用时 您只能访问该文档的字段 而不能访问集合 从 Firestore 获取文档时 我是否也得到了 该文档内的集合 不 当获取文档时 您只会获取该文档的字段 正如本节中所解释的document http
  • React Native 无法访问 Cloud Firestore 后端

    我之前使用的是 firebase 实时数据库 但现在想切换到 Cloud Firestore 但即使经过身份验证 也会收到以下错误 我目前正在使用 Android Simulator 尝试禁用我的实时数据库 但找不到解决方案 Firebas
  • 尝试使用 Mongoose 进行批量更新插入。最干净的方法是什么?

    我有一个集合 其中包含包含三个字段的文档 名字 姓氏和年龄 我试图找出 Mongoose 中的哪个查询可以用来进行批量更新插入 我的应用程序偶尔会收到具有相同三个字段的新对象数组 我希望查询检查文档中是否已存在名字和姓氏 如果存在 则更新年
  • 在 Windows 上使用 IPython 笔记本时出现 500 服务器错误

    我刚刚在 Windows 7 Professional 64 位上全新安装了 IPython 笔记本 我采取的步骤是 从以下位置安装 Python 3 4 1http python org http python org gt pip in
  • 调用 `app.close()` 时,Nest 找不到 Sequelize 元素

    我们有一个运行 Nest 8 0 8 的 Web 服务器 使用给定的模块设置 Module imports ConfigModule forRoot isGlobal true cache true validate load config
  • 获取类中的所有静态 getter

    假设我有这个类 我像枚举一样使用它 class Color static get Red return 0 static get Black return 1 有没有类似的东西Object keys to get Red Black 我使用
  • 节点未找到全局模块

    所以我意识到这是一个相当通用的标题和问题 但我已经搜索了很多答案 但遗憾的是它们似乎都不适合我 我希望通过我自己提供更多信息 也许有人有一个具体的答案 或者确切地知道将我重定向到哪个答案 我的问题 当我全局安装节点模块时 例如npm ins
  • 应用程序关闭时单击 Firebase 通知后打开特定活动/片段

    我知道这个问题似乎重复 但根据我的要求 我在网上搜索了很多帖子 但没有任何对我有用 我的要求 我正在使用 Firebase 来获取推送通知 当应用程序打开时意味着一切正常 但我的问题是 如果有任何推送通知出现 应用程序处于后台 关闭意味着我

随机推荐

  • RequireJS 有时无法加载 jQuery

    我的项目结构如下 root lib js 在我的 js 文件夹中 我有一个 require config 文件 它引用 lib 目录中的 javascript 文件 就像这样 require config paths jquery lib
  • 使用 sed 移动文本文件中的匹配行

    我正在尝试关注该帖子 如何使用正则表达式匹配 bash 脚本 将文件中的特定行移动到另一个位置 到我的示例文件 asdasd0 SRC OUT DIR a b c d e f g h asdasd2 asdasd3 asdasd4 DEFA
  • ASP.NET 5 客户端依赖管理 - Bower

    我正在尝试使用 MVC 6 的新 ASP NET 5 并且使用 Bower 来管理所有客户端依赖项 一切正常 但我有一个问题 当我添加依赖项时 假设是 jQuery 它添加了 dist and src以及 Bower 配置文件 lib的文件
  • 如何获取模板中 Meteor.call 函数的结果

    我正在尝试制作一个在 Meteor 客户端中使用的分页功能 因此我需要知道服务器上的记录数 在服务器上 在 server bootstrap coffee 中 我有以下代码 Meteor methods ContactsCount gt C
  • 未使用 JavaScript 正确设置 Internet Explorer cookie

    我正在尝试保存 恢复回发上的滚动位置 我的代码适用于 Firefox 和除 Internet Explorer 之外的所有主要浏览器 function saveScrollPosition Save the cookie if the re
  • PHP通过html标签分解字符串

    假设字符串 a 成立 p Phasellus blandit enim eget odio euismod eu dictum quam scelerisque p p Sed ut diam nisi p p Ut vestibulum
  • ssis 中的参数绑定

    如何使用执行包任务动态地将值传递给子包变量 我需要同时从另一个包 父包 调用一个包 子包 在每次调用中 我都需要将不同的值传递给子包变量 I have tried using parameter bindings in Execute Pa
  • 如何让 Phoenix 监听 IPv6?

    我正在努力寻找有关让 Phoenix 以及 Cowboy 和 Ranch 同时监听 IPv4 和 IPv6 的信息 我在 Ubuntu 16 04 的 VPS 上运行 它同时具有 IPv4 和 IPv6 地址 跑步时netstat tulp
  • 在单独的线程中关闭相机设备

    我正在使用 Android Camera2 创建自定义相机 cameraDevice close 方法速度很慢 并且会使 UI 冻结 1 秒 我把它放在另一个线程中 看起来效果很好 我想知道这是否会导致一些严重的问题以及是否有其他方法可以实
  • omp_set_num_threads(1) 比没有 openmp 慢的原因

    相信大家都同意这篇文章的标题 有人能指出我的原因吗 有没有参考书之类的 我试图找到但没有运气 我相信原因是 openmp 有同步开销 没有 openmp 项目没有 希望有人能进一步扩展原因吗 Thanks 虽然即使只有一个线程 使用 Ope
  • BigQuery:如何将库加载到java代码中

    我是 Bigquery 的新开发人员 我正在遵循教程https developers google com bigquery bigquery api quickstart带有 Java 代码和导入的库https developers go
  • JVM是否保证缓存非易失性变量?

    JVM是否保证缓存非易失性变量 程序员是否可以依赖 JVM 始终在本地为每个线程缓存非易失性变量 或者 JVM 可能会也可能不会这样做 因此程序员不应该依赖 JVM 来做到这一点 感谢您提前的答复 不 JVM 不保证非易失性字段的 缓存 J
  • Gremlin - 随机选择一项

    将我视为 用户 1 查询的目的是获取我关注的人 发布 的帖子 并对每个帖子进行检查 是否已被我喜欢过 我关注的其他人是否喜欢它 如果是随机选择其中一位用户返回 样本数据 g addV user property id 1 as 1 addV
  • OpenCV 从标准输入加载图像/视频

    我正在尝试使用以下代码从 stdin 读取 jpg 图像 int c count 0 vector
  • 在 Xcode 7 中构建 Parse 时出现链接错误

    我正在尝试将 Parse com SDK 添加到我的 Xcode 7 项目中 我已经遵循了入门指南 并且之前已经在 Xcode 6 中成功做到了 然而 这次当我尝试构建时 我收到了此错误消息 ld framework not found B
  • 列表视图列标题不显示 VB.Net

    我没有在 listView 中获取列标题 仅显示一项 0 不显示子项 这是我的代码 告诉我其中有什么问题 先感谢您 Dim PTCode As Integer CInt ChildPatnameTag ClearSQl CheckState
  • 部署项目中的安装目录

    我正在开发一个应用程序 我将在部署项目 将创建一个安装程序 的帮助下部署它 在安装程序的一个步骤中 用户将允许更改应用程序的安装文件夹 我需要知道这个文件夹是什么 因为那里保存了一些我需要从另一个 DLL 文件中使用的文件 如何以编程方式获
  • AutoCompleteTextView 未从 Google Places API 获取建议

    这是我从 Google Places API 获取地点建议的代码 但它显示一些错误 例如 无法连接到 Google Places API 我已经给出了在这段代码的底部得到的正确错误 我只需要一个 AutoCompleteTextView 来
  • 是否可以在 java (log4j) 中记录方法调用?

    是否可以在 log4j Java 中记录任何方法调用 Thanks 不 如果不编辑调用站点或方法本身就不行 我认为您所追求的是面向方面的编程 看一下AspectJ例如
  • 使用 Nodejs 实时抓取聊天记录

    我想做的是建立一个scrapingNodeJs 上的应用程序 它可以实时监控聊天并将某些消息存储在任何数据库中 我想做的是以下内容 我想从聊天平台流中捕获数据 从而捕获一些有用的信息来帮助那些正在做流媒体服务的人 但我不知道如何开始使用 N