Node.js_cheerio爬虫
cheerio.pngCheeiro的优点有很多:主要是实现了核心jQuery的子集,从jQuery库中消除了所有DOM不一致和浏览器残骸,从而揭示了其真正华丽的API。
- cheerio使用的一个爬虫案例,需要注意几点:
- cheerio只能爬取服务端渲染的内容
- 爬取的网站没有HTTPS加密
- 因为中node中不能引用DOM,所以需要使用cheerio插件(cheerio官网)封装的方法,以jQuery语法进行DOM查找
以凤凰网的导航栏为例:
-
导航栏
nav.png -
检查元素
- 安装依赖
npm init -y
cnpm install cheerio -S
- node代码
const http = require("http");
//可以让我们以jQuery语法来进行dom查找 并不是对dom操作
const cheerio = require("cheerio");
//需要用到文件读写模块
const fs = require("fs");
const path = require("path");
const url = "http://tech.ifeng.com/";
http.get(url, (res) => {
var str = "";
res.on("data", (data) => {
str += data;
})
res.on("end", () => {
// 将str封装到$符号中去
var $ = cheerio.load(str);
var nav = $(".nav-2sgjEBc8>li");
var arr = [];
for (var i = 0; i < nav.length; i++) {
var obj = {};
obj.id = i;
obj.text = nav.eq(i).find("a").text();
arr.push(obj)
}
fs.readFile(path.join(__dirname, "./data/index1.json"),(err,data)=>{
var dataList = JSON.parse(data + "");
if(!dataList.data){
dataList.data = [];
}
dataList.data = arr;
fs.writeFile(path.join(__dirname,"./data/index1.json"),
JSON.stringify(dataList),(err) =>{})
})
})
})
- index1.json文件(默认有一对{})
{
"data": [
{
"id": 0,
"text": "科技首页"
},
{
"id": 1,
"text": "数码"
},
{
"id": 2,
"text": "手机"
},
{
"id": 3,
"text": "5G"
},
{
"id": 4,
"text": "24H必读"
},
{
"id": 5,
"text": "风眼"
},
{
"id": 6,
"text": "凰家评测"
},
{
"id": 7,
"text": "深度阅读"
},
{
"id": 8,
"text": "科技视频"
},
{
"id": 9,
"text": "上市公司财报"
},
{
"id": 10,
"text": "区块链"
},
{
"id": 11,
"text": "车科技"
}
]
}
网友评论