node-cheerio插件实现网页爬虫
本文将介绍node使用cheerio插件,使jquery可以在服务端解析结构,实现精准查询并爬取数据
一、导入相关依赖
需要安装cheerio插件,使用npm i cheerio -S
指令安装
const cheerio = require('cheerio');
//根据请求网址的协议来决定引入http还是https模块
const http = require('http');
const fs = require('fs');
二、使用get请求或post请求网址
var url = '你想要爬取的网址';
http.get(url, (res) => {
let rawData = '';**
//监听数据
res.on('data', (chunk) => {
rawData += chunk;
});**
//结束标识
**res.on('end', () => {
try {
//调用cheerio封装的函数
getData(rawData);
** } catch (e) {**
**console.error(e.message)**;
}
});
}).on('error', (e) => {
console.error(`出现错误: ${e.message}`);
});
三、封装cheerio解析插件
function getData(data) {**
const $ = cheerio.load(data);
var aBox = $('.jiangshi li');
var arr = [];**
aBox.each((index, item) => {
var img = $(item).find('img').attr('src');
**var name = $(item).find('h6').text();
var txt = $(item).find('.jieshao').text().trim();
arr.push({
img,
name,
txt
})
})
console.log(arr);
}
四、附上完整代码
const cheerio = require('cheerio');
const http = require('http');
const fs = require('fs');
var url = '你想要爬取的位置';**
http.get(url, (res) => {
let rawData = '';
res.on('data', (chunk) => {**
rawData += chunk;
});
res.on('end', () => {**
try {
getData(rawData);
** } catch (e) {
console.error(e.message);
}
});
}).on('error', (e) => {**
console.error(`出现错误: ${e.message}`);**
});
function getData(data) {
//将获取到的html结构赋值给$
const $ = cheerio.load(data);**
**var aBox = $('.jiangshi li');**
var arr = [];
aBox.each((index, item) => {**
var img = $(item).find('img').attr('src');
**var name = $(item).find('h6').text();
**var txt = $(item).find('.jieshao').text().trim();
arr.push({**
img,
name,
txt
})
})
console.log(arr);
}
所有程序员都是好编剧,所有计算机都是烂演员