使用nodejs和python脚本实现爬虫程序,并将抓取数据生成词云图看板

  1. 创建项目,初始化目录结构。
  • 创建项目名称为pachong。
  • 运行 npm init -y 初始化项目。
  • 修改package.json文件中的type属性为module。
  • 安装 npm 包:npm install puppeteer #爬虫 | 自动化UI测试
  • 首先确保你的电脑上有python3环境
  • 安装两个python包 pip install wordcloud #生成词云图 pip install jieba #中文分词 (⚠️注意:如果安装的是python3,你的python包管理工具是pip3而不再是pip)

在这里插入图片描述

  1. 创建src目录。
  • 新建两个文件分别用于书写nodeJs代码和python代码。
  • 在网上找一个自己喜欢的字体ttf文件,准备让生成的词图云使用。
    在这里插入图片描述
  1. 介绍我们要爬取的内容
  • 我们要爬取的是掘金首页的导航栏 -> 前端模块 -> 推荐
  • 爬取前端(或者其他指定模块)推荐模块里所有文章的标题,并且依靠python脚本提供的分词和词图云的能力最终生成看板。
    在这里插入图片描述
  1. source code

index.js

import puppeteer from "puppeteer"; // puppeteer 的每一个操作都是异步的
import { spawn } from "node:child_process";
const keywords = process.argv[2]; // 获取在终端执行 node index.js keywords 中的 keywords// 1. 创建一个浏览器实例
const browser = await puppeteer.launch({headless: false, // 关闭无头模式 (什么是无头模式:无需打开浏览器就可以直接爬取,我们做demo还是想看到效果因此暂时关掉)
});// 2. 创建一个页面实例
const page = await browser.newPage();// 3. 跳转页面
await page.goto("https://juejin.cn");// 4. 确保页面挂载完毕再进行爬取操作
await page.waitForSelector(".side-navigator-wrap"); // 存放导航栏的父容器
// 5. 获取导航项元素例如:前端、后端、IOS等等 page.$表示获取单个元素, page.$$表示获取多个元素。
const elements = await page.$$(".side-navigator-wrap .nav-item-wrap span");// utils function
const collectFunc = async () => {const titleList = [];// 等待内容加载完毕await page.waitForSelector(".entry-list");// 获取推荐模块的标题const elements = await page.$$(".entry-list .content-main .title-row");for await (const el of elements) {const prop = await el.getProperty("innerText");let text = (await prop.jsonValue()).trim();titleList.push(text);}const pyProcess = spawn("python3", ["./index.py", titleList.join(",")]);pyProcess.stdout.on("data", (chunk) => {console.log("chunk:", chunk.toString());});pyProcess.stderr.on("error", (err) => {console.error("error:", err);});pyProcess.on("close", (code) => {console.log(`child process exited with code ${code}`);});
};// 6. 读取各个导航项
for await (const el of elements) {const prop = await el.getProperty("innerText");let text = (await prop.jsonValue()).trim();// 执行node index.js keywords命令时,keywords要是不传那就默认点击前端,否则点击keywordsif (text === (keywords || "前端")) {await el.evaluate((b) => b.click());await collectFunc();break;}
}

index.python

import jieba #引入结巴库
from wordcloud import WordCloud #引入词云图
import matplotlib.pyplot as plt
import sys
text = sys.argv[1]
words = jieba.cut(text) #中文分词
#添加字体文件 随便找一个字体文件就行 不然不支持中文
font = './font.ttf'
info = WordCloud(font_path=font,width=1000,height=800,background_color='white').generate(''.join(words))#输出词云图
plt.imshow(info,interpolation='bilinear')
plt.axis('off')
plt.show()
  1. 展示效果
    在这里插入图片描述

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

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

相关文章

c#数据库: 8.在窗体上显示学生信息

以上一章学生信息表为例,首先将查询的学生信息存储到数据集中,然后将数据集与数据显示控件绑定,从而实现学生信息在窗体上的显示 (1)创建一个名为StudentGridView的窗体应用程序,为窗体添加一个DataGridVi…

Stable Diffusion 模型分享:Counterfeit-V3.0(动漫)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 高质量动漫风格模型。 条目内容类型大模型基础模…

Java进阶-JINQ详解与使用

本文详细介绍了JINQ(Java Integrated Query),一种强化Java中数据查询能力的库,提供类SQL的查询语法和类型安全的操作。文章首先解释了JINQ的基本功能和应用,随后通过具体示例展示了如何使用JINQ进行数据过滤、投影、连…

Unity镂空图像做法

问题和解决方案 现在要完成一个需求,即镂空中间部分的image,外围image可以定义颜色并可选屏蔽点击,而中间的image需要透明且可以穿透,必须不能屏蔽点击。 由此拆分成了两个问题: 1.定义外围image颜色,内…

Facebook的语言学:社交媒体如何影响我们的沟通方式

1. 引言 社交媒体已经成为人们日常生活中不可或缺的一部分,而Facebook作为其中最具影响力的平台之一,不仅改变了人们之间的社交方式,也对我们的语言学产生了深远的影响。本文将深入探讨Facebook的语言学特点,以及它如何塑造和改变…

Spring6 当中 获取 Bean 的四种方式

1. Spring6 当中 获取 Bean 的四种方式 文章目录 1. Spring6 当中 获取 Bean 的四种方式每博一文案1.1 第一种方式:通过构造方法获取 Bean1.2 第二种方式:通过简单工厂模式获取 Bean1.3 第三种方式:通过 factory-bean 属性获取 Bean1.4 第四种…

【保姆级教程】用IDEA2023版本给RuoYi-Vue添加子模块

文章目录 前言添加子模块新建子模块新建子模块界面?新建子模块界面! 修改pom依赖配置RuoYiApplication添加测试接口配置接口权限测试 前言 若依前后端分离框架能够极大方便当前开发任务,并且使用的技术栈也相当丰富,但是目前只提…

Docker 中安装单体架构 Redis 的 Shell 脚本

该脚本用于实现 root 用户在 Linux 操作系统下的 Docker 中安装单体架构 Redis Shell 脚本 Git 仓库地址 Gitee:https://gitee.com/tongchaowei/common-shell/tree/main/root 执行脚本 bash ./docker-redis-install-single.sh需要注意的 该脚本会先检查是否安…

数学建模--图论最短路径基础

1.图的定义 学过数据结构或者离散数学的小伙伴们应该知道图的概念,我在这里简单的介绍一下: 图的概念和我们理解的是很不一样的,这里的图并不是我们的生活里面的图片,而是一种表示不同的数据之间的关系,例如这里的5个…

C++中auto关键字的用法详解

1.简介 auto作为一个C语言就存在的关键字,在C语言和C之间却有很大区别。 在C语言中auto修饰的变量,是具有自动存储器的局部变量,但因为局部变量默认类别默认是auto修饰导致一直没有人去使用它。 C11中,标准委员会赋予了auto全新…

XY_RE复现(二)

一,何须相思煮余年 0x55 0x8b 0xec 0x81 0xec 0xa8 0x0 0x0 0x0 0xa1 0x0 0x40 0x41 0x0 0x33 0xc5 0x89 0x45 0xfc 0x68 0x9c 0x0 0x0 0x0 0x6a 0x0 0x8d 0x85 0x60 0xff 0xff 0xff 0x50 0xe8 0x7a 0xc 0x0 0x0 0x83 0xc4…

【智能算法】火烈鸟搜索算法(FSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年,W Zhiheng等人受到火烈鸟迁徙觅食行为启发,提出了火烈鸟搜索算法(Flamingo Search Algorithm, FSA)。 2.算法原理 2.1算法思想 FSA受到火烈鸟…

C++|STL简介-string-vector基础运用

目录 什么是STL STL里面有什么 容器 string 序列式容器 vector deque list 关联式容器 set multiset map multimap 算法 非可变序列算法 可变序列算法 排序算法 数值算法 什么是STL STL(标准模板库):是C标准库的重要组成部分,不仅是一…

MVC架构简述

MVC简介 MVC 是一种非常常见且常用的分层架构,主要包括;M - mode 对象层,封装到 domain 里。V - view 展示层,但因为目前都是前后端分离的项目,几乎不会在后端项目里写 JSP 文件了。C - Controller 控制层&#xff0c…

站群SEO优化策略及其遭遇DDoS攻击时的应对方法

一、站群SEO优化策略 站群优化主要是指通过合理布局和内容优化提升一系列网站在搜索引擎中的整体排名表现。以下是一些关键步骤与相关代码示例(以WordPress为例): 差异化内容建设: 每个站点的内容必须具有独立性和价值性&#x…

CSS-vminvmax单位

vmin 和 vmax 单位 vmin 是相对于视口宽度和高度中较小值进行计算,它的值为视口宽度和高度中的较小值的百分比。 例如,如果视口宽度为 800px,高度为 1000px,那么 1vmin 等于 8px(800px 的 1%)。 vmax 是…

【Unity基础】TextMeshPro组件学习过程记录

目录 1.TextMeshPro组件渲染创建文本RTL Editor字体Font Asset字体加粗,下划线等字体大小控制字体颜色控制字体渐变控制字符间隔、单词间隔、行间距、段落间距控制WrappingUV映射控制代码 2.TextMeshPro组件AssetFace InfoGeneration Setting 3.使用Dynamic SDF Sys…

【可视化3D卷积计算过程】

目录 1. 可视化过程2. 代码验证 前言:开始处理视频数据,遇到了陌生又熟悉的3D卷积,但对其计算过程有点疑惑,网上也没找到什么可视化动画,所以研究明白并做个记录,方便日后复习。有点简化,但认真…

基于FCN网络实现的多类别图像分割任务

1、前言 FCN 作为图像分割的开山之作,将分割任务作为逐个像素点的分类任务 之前完成了基于unet、resnetunet、deeplab等等网络的分割任务,具体的可以参考本专栏: 图像分割_听风吹等浪起的博客-CSDN博客 因为FCN网络的实现较为复杂&#xf…

杰发科技AC7840——CAN通信简介(7)_波形分析

参考: CAN总线协议_stm32_mustfeng-GitCode 开源社区 0. 简介 隐形和显性波形 整帧数据表示 1. 字节描述 CAN数据帧标准格式域段域段名位宽:bit描述帧起始SOF(Start Of Frame)1数据帧起始标志,固定为1bit显性(b0)仲裁段dentify(ID)11本数…