使用node.js抓取其他网站数据,以及cheerio的介绍
时间:2022-07-23
本文章向大家介绍使用node.js抓取其他网站数据,以及cheerio的介绍,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、基本思路
首先寻找一个网址:http://tech.ifeng.com/,因为这个是http协议,所以我们需要用到node.js的HTTP模块,我们使用HTTP模块中的get()方法进行抓取。其中假如我们不需要抓取的所有数据,而我们只需要其中的部分数据,比如某个类下面的a标签里的文字,这时如果是在前端中我们可以用DOM操作找到这个节点,但是node.js中没有DOM操作,所以这里我们需要用到cheerio这个库。既然抓取了网站上的数据就会涉及到文件的写入,这时需要用到node.js中的fs模块。
二、学习网址
https://cheerio.js.org/ cheerio官方学习文档 https://www.npmjs.com/package/cheerio cheerio npm网址 https://nodejs.org/dist/latest-v10.x/docs/api/ node.js官方文档 http://nodejs.cn/api/ node.js中文文档
二、什么是cheerio以及如何使用
cheerio是专为服务器设计的核心jQuery的快速,灵活和精益实现。他可以像jquery一样操作字符串。
安装cheerio
npm install cheerio
具体使用
const cheerio = require('cheerio')
const $ = cheerio.load('<h2 class="title">Hello world</h2>')
$('h2.title').text('Hello there!')
$('h2').addClass('welcome')
$.html()
//=> <h2 class="title welcome">Hello there!</h2>
三、具体代码
const http = require("http");
const fs = require("fs");
const cheerio = require("cheerio");
http.get("http://tech.ifeng.com/", function(res) {
// 设置编码
res.setEncoding("utf8");
// 当接收到数据时,会触发 "data" 事件的执行
let html = "";
res.on("data", function(data){
html += data;
});
// 数据接收完毕,会触发 "end" 事件的执行
res.on("end", function(){
// 待保存到文件中的字符串
let fileData = "";
// 调用 cheerio.load() 方法,生成一个类似于 jQuery 的对象
const $ = cheerio.load(html);
// 接下来像使用 jQuery 一样来使用 cheerio
$(".pictxt02").each(function(index, element) {
const el = $(element);
let link = el.find("h3 a").attr("href"),
title = el.find("h3 a").text(),
desc = el.children("p").text();
fileData += `${link}rn${title}rnt${desc}rnrn`;
});
// console.log("读取结束,内容:");
// console.log(html);
fs.writeFile("./dist/source.txt", fileData, function(err) {
if (err)
return;
console.log("成功")
});
})
});
- Storm读取Kafka数据是如何实现的
- faster-rcnn在编译时遇到的一些问题
- 使用感知机训练加法模型
- 让你真正理解什么是SparkContext, SQLContext 和HiveContext
- 谈谈Go语言的反射三定律
- centos6.x升级protobuf操作流程.
- java调用c++函数的简单笔记
- 数据挖掘之聚类算法Apriori总结
- 数据挖掘之聚类算法K-Means总结
- mxnet运行时遇到问题及解决方法
- 【算法】朴素贝叶斯分类算法原理与实践
- 深度学习之图像的数据增强
- 《GO并发编程实战》—— 原子操作
- Golang语言社区--wesocket的demo(包括H5前端,GO后端)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- laravel批量生成假数据的方法
- 对laravel in 查询的使用方法详解
- PHP使用redis位图bitMap 实现签到功能
- thinkphp5+layui实现的分页样式示例
- Laravel实现搜索的时候分页并携带参数
- PHP7.3.10编译安装教程
- Laravel-添加后台模板AdminLte的实现方法
- PHP7 安装event扩展的实现方法
- 在laravel框架中使用model层的方法
- 漂亮的thinkphp 跳转页封装示例
- thinkphp5框架前后端分离项目实现分页功能的方法分析
- laravel 根据不同组织加载不同视图的实现
- 详解将数据从Laravel传送到vue的四种方式
- Laravel实现ApiToken认证请求
- laravel 实现划分admin和home 模块分组