net模块
net
模块是[Node.js]的核心模块之一,它提供了用于创建基于网络的应用程序的API。net
模块主要用于创建TCP[服务器]和TCP
[客户端],以及处理网络通信。
使用场景:
-
服务端之间的通讯
服务端之间的通讯可以直接使用TCP通讯,而不需要上升到http层,
全双工通信
index.js
import net from 'net' const service = net.createServer((socket) => { setInterval(()=> { socket.write("Hello World") },1000) socket.on('data',(data)=> { console.log(data.toString()) }) }) service.listen(3000,()=> { console.log('Server is running on port 3000') })
service.js
import net from 'net'; const service = net.createConnection({ port: 3000, host: '127.0.0.1' }) service.on('data', (data) => { console.log(data.toString()) }) service.write('我是service文件,Hello World')
puppeteer
npm install puppeteer #爬虫 | 自动化UI测试
Puppeteer是一个由Google开发和维护的Node.js库,它提供了一个高级的API,用于通过Headless Chrome或Chromium控制和自动化网页操作。它可以模拟用户在浏览器中的交互行为,例如点击、填写表单、截屏、生成PDF等,同时还能够获取网页的内容和执行JavaScript代码。
以下是Puppeteer的一些主要特性:
-
自动化浏览器操作:Puppeteer可以以无头模式运行Chrome或Chromium,实现对网页的自动化操作,包括加载页面、点击、表单填写、提交等。它还支持模拟用户行为,如鼠标移动、键盘输入等。
-
截图和生成PDF:Puppeteer可以对页面进行截图,保存为图像文件,也可以生成PDF文件。这对于生成网页快照、生成报告、进行页面测试等非常有用。
-
爬虫和数据抓取:Puppeteer可以帮助你编写网络爬虫和数据抓取脚本。你可以通过模拟用户行为来导航网页、提取内容、执行JavaScript代码,并将数据保存到本地或进行进一步的处理。
代码案例
puppeteer
会自动打开浏览器点击你传入的参数,例如前端,它就会自动点击前端菜单,然后拿到推荐的数据,交给python,进行中文分词
,分完词之后输出词云图
。
import puppeteer from "puppeteer";// 每一个操作都是异步的 import {spawn} from "child_process"; const te = process.argv[2]; // 1. 打开浏览器,关闭无头模式 const bower = await puppeteer.launch({headless: false}); // 2. 创建新的页面 const page = await bower.newPage(); // 3. 打开页面,设置宽高 await page.setViewport({width: 1920, height: 1080}); await page.goto('https://juejin.cn/'); // 4. 等待目标元素出现 side-navigator-wrap await page.waitForSelector('.side-navigator-wrap'); // 5. 获取多个元素里面的内容 const elements = await page.$$('.side-navigator-wrap .nav-item-wrap span') // 6. 循环遍历,打印内容 for await (const element of elements) { const props = await element.getProperty('innerText'); const text = await props.jsonValue(); if(text === (te || '前端')){ await element.click(); collectFn() break; } } async function collectFn() { let titles = [] await page.waitForSelector('.entry-list'); const elements = await page.$$('.entry-list .title-row a'); for await (const element of elements) { const props = await element.getProperty('innerText'); const text = await props.jsonValue(); titles.push(text) } // 调用python脚本进行词云图分析 const pyProcess = await spawn('python', ['index.py', titles.join(' ')]); pyProcess.stdout.on('data', function (data) { console.log(data.toString()); }); pyProcess.stderr.on('data', function (data) { console.error(data.toString()); }) pyProcess.on('close', function (code) { console.log('Python process exited with code ' + code); }) }
import jieba #引入结巴库 from wordcloud import WordCloud #引入词云图 import matplotlib.pyplot as plt import sys text = sys.argv[1] words = jieba.cut(text) #中文分词 text = ' '.join(words) #将分词结果用空格连接 #添加字体文件 随便找一个字体文件就行 不然不支持中文 font = './font.ttf' info = WordCloud(font_path=font,background_color='white').generate(text) #输出词云图 plt.imshow(info,interpolation='bilinear') plt.axis('off') plt.show()