Nodejs 第五十六章(爬虫)

什么是爬虫?

爬虫,也称为网络爬虫或网络蜘蛛,是指一种自动化程序或脚本,用于在互联网上浏览和提取信息。爬虫模拟人类用户在网页上的行为,通过HTTP协议发送请求,获取网页内容,然后解析并提取感兴趣的数据

在使用爬虫时,需要遵守法律法规和网站的使用条款

  1. 网站的使用条款:每个网站都有自己的使用条款和隐私政策,这些规定了对网站内容和数据的访问和使用限制。在使用爬虫之前,务必仔细阅读并遵守网站的使用条款。
  2. 知识产权:爬虫可能涉及到对网站上的内容进行复制、提取或分发。在进行这些操作时,你应该尊重知识产权法律,包括版权和商标法。确保你有合法的权利使用、复制或分发所爬取的内容。
  3. 网络破坏和滥用:使用爬虫时,应避免对目标网站造成不必要的负载、干扰或破坏。不得以恶意方式使用爬虫,如进行DDoS攻击、破解安全措施或非法搜集个人信息。
  4. 数据隐私和个人信息保护:在爬取网站上的数据时,需特别注意处理个人身份信息和隐私数据的合规性。遵守适用的数据保护法律,确保合法地处理和存储用户数据。
  5. 欺诈和滥用:不得使用爬虫进行欺诈、仿冒、垃圾邮件或其他非法活动。尊重其他用户和网站的利益,遵守公平竞争原则

掘金robots.txt规则

安装依赖

nodejs

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代码,并将数据保存到本地或进行进一步的处理。
  4. 网页性能分析:Puppeteer提供了一些用于分析网页性能的API,例如测量页面加载时间、网络请求和资源使用情况等。这对于性能优化和监测非常有用。
  5. 无头模式与调试模式:Puppeteer可以在无头模式下运行,即在后台运行Chrome或Chromium,无需显示浏览器界面。此外,它还支持调试模式,允许你在开发过程中检查和调试页面。

python

pip install wordcloud #生成词云图
pip install jieba #正文分词
  1. WordCloud:
    WordCloud是一个用于生成词云的Python库。它可以根据给定的文本数据,根据词频生成一个美观的词云图像,其中词语的大小表示其在文本中的重要程度或频率。WordCloud库提供了丰富的配置选项,可以控制词云的外观、颜色、字体等属性。你可以根据需求定制词云的样式和布局。WordCloud还提供了一些方便的方法,用于从文本中提取关键词、过滤停用词等。你可以使用pip安装WordCloud库,并参考官方文档进行使用。
  2. jieba:
    jieba是一个开源的中文分词库,用于将中文文本切分成单个词语。中文分词是NLP(自然语言处理)中的一个重要任务,jieba库提供了一种有效且灵活的分词算法,可以在中文文本中准确地识别出词语边界。jieba支持三种分词模式:精确模式、全模式和搜索引擎模式。你可以根据需要选择适合的分词模式

代码案例

puppeteer 会自动打开浏览器点击你传入的参数,例如前端,它就会自动点击前端菜单,然后拿到推荐的数据,交给python,进行中文分词,分完词之后输出词云图

index.js

import puppeteer from 'puppeteer'
import { spawn } from 'child_process'
const btnText = process.argv[2]
const browser = await puppeteer.launch({
    headless: false,//取消无头模式
});
const page = await browser.newPage(); //打开一个页面
page.setViewport({ width: 1920, height: 1080 }); //设置页面宽高
await page.goto('https://juejin.cn/'); //跳转到掘金
await page.waitForSelector('.side-navigator-wrap'); //等待这个元素出现

const elements = await page.$$('.side-navigator-wrap .nav-item-wrap span') //获取menu下面的span

const articleList = []
const collectFunc = async () => {
   //获取列表的信息
    await page.waitForSelector('.entry-list')
    const elements = await page.$$('.entry-list .title-row a')
    for await (let el of elements) {
        const text = await el.getProperty('innerText')
        const name = await text.jsonValue()
        articleList.push(name)
    }
    console.log(articleList)
    //调用python脚本进行中文分词 输出词云图
    const pythonProcess = spawn('python', ['index.py', articleList.join(',')])
    pythonProcess.stdout.on('data', (data) => {
        console.log(data.toString())
    })
    pythonProcess.stderr.on('data', (data) => {
        console.log(data.toString())
    })
    pythonProcess.on('close', (code) => {
        console.log(`child process exited with code ${code}`)
    })
}

for await (let el of elements) {
    const text = await el.getProperty('innerText') //获取span的属性
    const name = await text.jsonValue() //获取内容
    if (name.trim() === (btnText || '前端')) {
        await el.click() //自动点击对应的菜单
        collectFunc() //调用函数
    }
}

index.py

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()

效果展示 (词云图)

image.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Day18 Java学生管理系统

Day18 Java学生管理系统 一、需求分析 考虑的方面: 用户需求、功能需求、非功能性需求、约束条件、优先级和权衡、可追踪性、需求验证。 二、项目搭建 搭建学生管理系统 1、创建项目的main ;pojo ; sms ; utils包。 2、编写系统的 增(涉及到扩容–…

一. 并行处理与GPU体系架构-GPU并行处理

目录 前言0. 简述1. 这个小节会涉及到的关键字2. CPU与GPU在并行处理的优化方向3. Summary总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习下课程第一章——并行处理与GPU体…

4.1_5 文件存储空间管理

文章目录 4.1_5 文件存储空间管理(一)存储空间的划分与初始化(二)存储空间管理——空闲表法(三)存储空间管理——空闲链表法(1)空闲盘块链(2)空闲盘区链 &…

腾讯云企业用户可以申请免费服务器试用吗?

腾讯云企业用户可以申请免费服务器试用吗?可以的,腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM,轻量配置可选2核2G3M、2核8G7M和4核8G12M,CVM云服务器可选2核2G3M和2核…

拌合楼内部管理系统开发(三) 继续功能模块及数据表设计-收发管理模块(无人值守功能)

前言:继续闭门造车 继续发挥,上一篇写到了生产管理,今天开始做无人值守的功能模块的设计了.核心就是收发管理的模块了. 一、发货的工作流程: 我设想的发货流程如下: 1. 发货的源头指令来源于生产计划: 生产计划要素是需要生产的产品&#xff…

解决google Chorme 隐私设置错误

问题: 我们在使用浏览器的时候,出现隐私设置错误“您的链接不是私密连接”,如下图所示: 第一步开始来解决隐私设置错误,打开浏览器之后,点击右上方的三点图标,选择设置,如下图所示&…

基于支持向量机SVM的沉降预测,SVM详细原理,Libsvm详解

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 完整代码和数据下载链接:基于支持向量机SVM的沉降预测资源-CSDN文库 https://download.csdn.net/download/abc991835105/88947544 SVM应用实例,基于支持向量机SVM的沉降预测…

MYSQL报 - Lock wait timeout exceeded; try restarting transaction

前言 今天在使用数据库编辑数据时,页面突然卡主,退出程序后重新编辑,发现报错,1205 - Lock wait timeout exceeded; try restarting transaction(如下图),正巧在和同事开会&#xf…

基于Springboot和Redis实现的在线选课系统

1.项目简介 1.1 介绍 毕业设计真的就是demo吗?作为工作前的最后一个校园项目,毕业设计应当尽可能的贴近企业实战,业务不必很复杂,但要做到麻雀虽小五脏俱全。本期学长跟大家一起分享如何开发一个在线选课系统,需求也…

如何实现队列和栈的转化(c语言)

文章目录 一.什么是栈二.什么是队列三.怎么把栈变成队列(力扣)四.怎么把队列变成栈(力扣)总结 一.什么是栈 栈(stack)又名堆栈,它是一种运算受限的线性表。限定权在表尾进行插入和删除操作的线性…

从政府工作报告中的IT热词统计探计算机行业发展(二)人工智能+:3次

政府工作报告作为政府工作的全面总结和未来规划,不仅反映了国家整体的发展态势,也为各行各业提供了发展的指引和参考。随着信息技术的快速发展,计算机行业已经成为推动经济社会发展的重要引擎之一。因此,从政府工作报告中探寻计算…

嵌入式学习39-程序创建数据库及查找

1.sqlite3_open int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 功能: 打开 数据库文件(创建一个数据库连接) 参数: filename: …

顺序表操作

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝既然选择了远方,当不负青春…

腾讯云免费服务器配置大全和个人企业申请流程,2024年新版教程

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM,轻量配置可选2核2G3M、2核8G7M和4核8G12M,CVM云服务器可选2核2G3M和2核4G3M配置,腾讯云服务器网txyfwq.com分享2024年最新腾讯云免费…

力扣爆刷第98天之hot100五连刷76-80

力扣爆刷第98天之hot100五连刷76-80 文章目录 力扣爆刷第98天之hot100五连刷76-80一、295. 数据流的中位数二、121. 买卖股票的最佳时机三、55. 跳跃游戏四、45. 跳跃游戏 II五、763. 划分字母区间 一、295. 数据流的中位数 题目链接:https://leetcode.cn/problems…

最后的挣扎 - Qt For Android on HuaWei Mate 60Pro (v4.0.0)

简介 为什么叫最后的挣扎, 其实都知道即将到来的 HarmonyOS NEXT 将抛弃Android支持,纯血HarmonyOS 将上线, 此时再说Qt for android支持Huawei HarmonyOS的设备其实并没有多少意思, 但恐怕在大多数基础软件完成兼容前, 很多人还是…

avue-crud顶部操作按钮插槽;avue-crud列数据插槽;avue-crud行操作按钮插槽

1.avue-crud顶部操作按钮插槽&#xff1b; <template slot"menuLeft" slot-scope"{ size }"><div class"left"><div class"btn"><el-button type"primary" size"small" click"onBatchR…

[Python初阶]2255.统计是给定字符串前缀的字符串数目

目录 2255.统计是给定字符串前缀的字符串数目 ①.题目 ②.问题分析 ③.startswith()方法理解 与 说明 Ⅰ.定义和用法 Ⅱ.语法 ④.问题解决 ⑤总结 2255.统计是给定字符串前缀的字符串数目 ①.题目 ②.问题分析 需求:统计列表words中,是字符串s的前缀的字符串的数目. 解…

无人机自动返航算法实现与优化

一、引言 随着无人机技术的快速发展&#xff0c;其在航拍、农业、救援等领域的应用越来越广泛。在这些应用中&#xff0c;无人机的自动返航功能显得尤为重要。一旦无人机失去控制或与遥控器失去连接&#xff0c;自动返航算法能够确保无人机安全返回起飞点&#xff0c;避免损失和…

echarts实践总结(常用二):折线图(特点:渐变、面积区域)

目录 第一章 echarts基本使用 第二章 echarts实践——折线图 效果展示 第一章 echarts基本使用 Echarts常用配置项(详细入门)_echarts配置项手册-CSDN博客 柱状图案例&#xff1a; echarts实践总结(常用一)&#xff1a;柱状图&#xff08;特点&#xff1a;渐变色、点击缩放、…