学习node.js 十二 net模块,puppeteer的使用

net模块

net模块是[Node.js]的核心模块之一,它提供了用于创建基于网络的应用程序的API。net模块主要用于创建TCP[服务器]和TCP[客户端],以及处理网络通信。

使用场景:

  1. 服务端之间的通讯

    服务端之间的通讯可以直接使用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的一些主要特性:

  1. 自动化浏览器操作:Puppeteer可以以无头模式运行Chrome或Chromium,实现对网页的自动化操作,包括加载页面、点击、表单填写、提交等。它还支持模拟用户行为,如鼠标移动、键盘输入等。

  2. 截图和生成PDF:Puppeteer可以对页面进行截图,保存为图像文件,也可以生成PDF文件。这对于生成网页快照、生成报告、进行页面测试等非常有用。

  3. 爬虫和数据抓取: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()
​

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值