在Electron中爬取CSDN首页的文章信息

背景

之前分享了Electron入门的相关文章:https://gitee.com/ruirui-study/electron-demo

后来,我就想在里面多做一些演示给大家看,集成了以下功能及演示:

  • 窗口管理、各种方法封装
  • 托盘管理
  • 菜单管理
  • 获取屏幕演示
  • 多窗口及通信演示
  • 等等……

然后,我就想着把之前的nodejs爬虫也集成进来演示,在Electron中做一些结合。先上效果图,这是爬取CSDN首页的数据。
在这里插入图片描述

选框架

nodejs的爬虫框架主要有2个

Puppeteer

  • 简介:Puppeteer 是由 Google 开发的 Node.js 库,它提供了一个高级 API 来控制 Chrome 或 Chromium 浏览器。通过 Puppeteer,你可以模拟用户在浏览器中的各种操作,如点击、滚动、输入等,从而可以处理动态渲染的页面。
  • 优点:能处理复杂的动态网页,支持截图、生成 PDF 等功能。
  • 适用场景:适用于需要处理动态内容、模拟用户交互的场景,例如爬取需要登录才能访问的页面、处理包含大量 JavaScript 渲染的页面。

Cheerio

  • 简介:Cheerio 本身并非完整的爬虫框架,但它是处理 HTML 和 XML 数据的强大工具,常与其他 HTTP 请求库搭配使用来构建爬虫。它仿照 jQuery 的 API 设计,使得开发者可以像在浏览器中操作 DOM 一样方便地解析和操作抓取到的 HTML 内容。
  • 优点:轻量级,学习成本低,对 DOM 操作支持友好。
  • 适用场景:适用于需要从 HTML 页面中提取特定数据的场景,例如提取网页中的标题、链接、图片等信息。

开始

由于不涉及复杂的场景,所以本实例选择轻量型的Cheerio框架,主要代码如下:

import axios from "axios";
import * as cheerio from "cheerio";// 目标网页的URL,这里使用 CSDN网站 作为测试,爬取主要文章标题等内容
const targetUrl = "https://www.csdn.net";// 请求目标网页,获取HTML内容
const getHtml = async () => {const response = await axios.get(targetUrl);if (response.status !== 200) {throw new Error("请求失败");}return response.data;
};// 解析HTML内容,获取菜品的标题和图片链接
const getData = async (html) => {const $ = cheerio.load(html);const list = [];$(".article-item").each((i, item) => {// 标题const title = $(item).find(".article-title").text().trim();// 简介const desc = $(item).find(".article-desc").text().trim();// 作者const author = $(item).find(".user-info").text().trim();// 阅读量、点赞量、收藏量const read_num = $(item).find(".article-bottom > div:nth-child(1) .num").text().replace('阅读 ', '');const zan_num = $(item).find(".article-bottom > div:nth-child(2) .num").text().replace('赞', '');const collect_num = $(item).find(".article-bottom > div:nth-child(3) .num").text().replace('收藏 ', '');// 文章链接const link  = $(item).find(".article-title").attr("href");// 封面图片const imgStyle = $(item).find(".back-img-banner").attr("style");const img = imgStyle? imgStyle.replace(/\s+/g, '').match(/url\(["']?(.*?)["']?\)/i)?.[1]: ''; // 可设置默认图片list.push({title,desc,author,read_num,zan_num,collect_num,link,img});});return list;
};

启动方式

直接启动

如果你想直接启动,如执行node test.js,可以在末尾加下面的代码:

(async () => {const html = await getHtml();const list = await getData(html);console.log("执行完毕", list);return list;
})();
暴露给主进程

你可以把爬取的结果返回给主进程,主进程再把结果发送给渲染进程,这样就能直接展示在前端界面了:

// 暴露方法给外部使用,简单高效
export async function crawlCSDN() {try {const html = await getHtml();const list = await getData(html);return list;} catch (error) {throw new Error(`爬取失败: ${error.message}`);}
}

然后,你可以在主进程暴露方法给渲染进程,示例如下:

import { crawlCSDN } from '@main/nodejs/crawler.mjs'// CSDN爬虫
ipcMain.handle('crawler-csdn', async () => {try {const data = await crawlCSDN();return { status: 'success', data };} catch (error) {return { status: 'error', message: error.message };}
});

这样,你就可以直接在渲染进程中使用了:

const crawlerCDN = async () => {try {const result = await window.electron.ipcRenderer.invoke('crawler-csdn');console.log('crawler-csdn - result', result)crawlerInfo.value = result;} catch (error) {console.error('Error crawler-csdn:', error);}
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bfs处理 推多米诺

前言:这个题目本来打算一次遍历来写,但是写的时候发现有点难搞,后面发现是 bfs ,但是这个bfs 不是很好处理,后面看了题解,颇有感触 这个和堆处理的最短路是一样的,在取出一个位置的时候才对其进…

【Java IO流】File类基础详解

参考笔记:java File类基础 万字详解(通俗易懂)-CSDN博客 目录 1.前言 2. File类介绍 3. File类构造方法 4.File类常用的方法案例演示 4.1 创建文件/文件夹的方法 4.2 删除文件/文件夹的方法 4.3 判断文件/文件夹是否存在的方法 4.4 …

【业务领域】InfiniBand协议总结

InfiniBand协议总结 InfiniBand协议是什么?Infiniband产生的原因Mellanox公司介绍及其新闻基于TCP/IP的网络与IB网络的比较IB标准的优势什么是InfiniBand网络什么是InfiniBand架构Mellanox IB卡介绍InfiniBand速率发展介绍InfiniBand网络主要上层协议InfiniBand管理…

蒙特卡罗方法(Monte Carlo Method)​​:基于随机采样的数值计算与模拟技术

​​核心思想​​ 蒙特卡罗方法通过​​随机采样​​和​​统计模拟​​解决数学、物理、工程等领域的复杂问题,其核心是利用​​大数定律​​——当样本量足够大时,样本均值会收敛于期望值。 ​​关键特点​​: ​​无维度诅咒​​&#x…

【资料分享】全志T536(异构多核ARMCortex-A55+玄铁E907 RISC-V)工业核心板硬件说明书

前 言 本文为创龙科技SOM-TLT536工业核心板硬件说明书,主要提供SOM-TLT536工业核心板的产品功能特点、技术参数、引脚定义等内容,以及为用户提供相关电路设计指导。 为便于阅读,下表对文档出现的部分术语进行解释;对于广泛认同释义的术语,在此不做注释。

【2025年五一数学建模竞赛】A题 完整论文 模型建立与求解

目录 2025年五一数学建模竞赛 A题基于历史数据与模式识别的道路车流量推测模型研究摘要一、问题的背景和重述1.1问题的背景1.2问题的重述 二、问题的分析三、模型假设四、符号及变量说明五、模型的建立与求解问题一:基于线性回归的支路车流量推测问题二:…

MySQL初阶:数据库基础,数据库和表操作,数据库中的数据类型

1.数据库基础 数据库是一个客户端——服务器结构的程序。 服务器是真正的主体,负责保存和管理数据,数据都存储在硬盘上 数据库处理的主要内容是数据的存储,查找,修改,排序,统计等。 关系型数据库&#…

“会话技术”——Cookie_(2/2)原理与使用细节

经过Cookie的快速入门与代码使用。如果想深入理解Cookie的技术实现,就得去理解它的原理。 且有些时候使用Cookie,还要根据需求设置存活期限以及确定Cookie获取范围等其他细节。最后,我们会总结Cookie这门客户端会话技术的作用。 一、原理 注…

DBeaver连接人大金仓数据库V9

1、官网下载驱动jdbc 打开官网地址,找到下面的V9R1-JDBC,点击后面的下载即可,保存到本地 2、解压最新版的驱动程序 3、把***_JDBC文件夹内的驱动程序复制到DBeaver安装目录下的plugins文件夹里 4、打开dbeaver程序,增加kingbase…

服务器丢包率测试保姆级教程:从Ping到网络打流仪实战

测试服务器丢包率是网络性能诊断的重要环节,丢包通常由网络拥塞、硬件故障、配置错误或线路质量差导致。以下是多种测试方法的详细步骤和工具说明: 一、基础工具测试(无需专业设备) 1. 使用 ping 命令 命令示例: bash…

n8n 使用 AI Agent 和 MCP 社区节点

n8n 使用 AI Agent 和 MCP 社区节点 0. 前提条件1. 创建一个 "在聊天消息时" 节点2. 创建一个 "AI Agent" 节点 0. 前提条件 请参考 n8n 安装 n8n-nodes-mcp 社区节点 安装 MCP 社区节点。 1. 创建一个 “在聊天消息时” 节点 单击 “测试聊天”&#xf…

抱佛脚之学SSMSpringMVC数据绑定

绑定默认数据类型 绑定简单数据类型 绑定POJO类型 绑定包装POJO 复杂数据绑定 绑定数组 绑定集合

解决“‘mvn‘ 不是内部或外部命令,也不是可运行的程序”错误

一、问题描述 当我们在Windows上运行sqlrest 工具时,提示mvn 不是内部或外部命令,也不是可运行的程序的错误,导致无法安装sqlrest工具,如下图所示: 二、问题分析 从提示中我们不难看出是由于我们缺失了【maven】环境,导致无法启动项目;我们只需要安装【maven】环境即可解…

DeepSeek R1:强化学习范式的推理强化模型

定位与目标 DeepSeek R1 的推出并非 DeepSeek V3 的简单迭代,而是一次在训练范式上的大胆探索。与传统大模型主要依靠监督微调(SFT)后进行强化学习不同,R1 将重点放在推理能力和行为对齐上,尝试通过大规模强化学习直接激发模型的推理潜力。其目标是利用强化学习的反馈机制,…

变转速振动信号分析处理与故障诊断算法模块

变转速振动信号分析处理与故障诊断算法模块,作为信号处理算法工具箱的主要功能模块,形成了以变转速振动信号分析处理与故障诊断算法模块的经典算法模型,可应用于各类关键机械部件(轴承、齿轮、转子等)的信号分析、故障…

Kafka 配置参数性能调优建议

文章目录 1、生产者调优batch.size(重要)linger.mscompression.typeacks(重要)buffer.memorymax.in.flight.requests.per.connection(重要)message.max.bytes(重要) 2、消费者调优fe…

Redis怎么避免热点数据问题

使用 RedisTemplate 避免热点数据问题的解决方案、场景及示例: 1. 数据分片(Sharding) 场景:高频读写的计数器(如文章阅读量统计) ​原理​:将数据分散到多个子键,降低单个 Key 的压…

B站Michale_ee——ESP32_IDF SDK——FreeRTOS_8 消息缓冲区

Message Buffer(消息缓冲区)与Stream Buffer(流数据缓冲区)类似,但有2点不同: Message Buffer每次只接收1次完整的Message;Message Buffer接收缓冲区小于1条Message大小时,会接收不到数据&#…

【计算机网络网络层深度解析】从IP协议到路由优化

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心实验实现实验1:IPv6地址配置实验2:OSPF路由配置实验3:NAT转换验证 运行…

【Hive入门】Hive性能调优:小文件问题与动态分区合并策略详解

目录 引言 1 Hive小文件问题概述 1.1 什么是小文件问题 1.2 小文件产生的原因 2 Hive小文件合并机制 2.1 hive.merge.smallfiles参数详解 2.2 小文件合并流程 2.3 合并策略选择 3 动态分区与小文件问题 3.1 动态分区原理 3.2 动态分区合并策略 3.3 动态分区合并流程…