最近一段时间学习node,看到了爬虫,记录一下自己写的demo~~
const axios = require("axios"); //这里我使用了axios,vue中常用的,也可以自己封装别的
const cheerio = require("cheerio"); //引入了cheerio,用法和jq十分类似,不用自己写那些igs正则了,多的很
const express = require("express"); // 引入express模块,测试接口使用,express写接口的基本用法
// cheerio 试试
const app = express(); // 相当于http.createServer()
app.use(express.json()); // 允许客户提供的json数据,必须加~
app.get("/movie", (req, res) => { //写一个get请求呗
// console.log('req========================>',req.query.start) // 浏览器后直接加的参数在 req.query中获取,这里是加了分页~
var target = `https://vip.1905.com/list/o6p${
req.query.start ? req.query.start : 1 //这里是网址切换,根据你所爬网站的网址来区分
}.shtml`;
// 使用request.js库发送get请求
axios.get(target).then((html) => {
// 载入并初始化cheerio
// console.log(html) 这里要注意,真正的html在xiaos中实在data里的~
const $ = cheerio.load(html.data); //加载html
// fs.writeFileSync("1.html", html.data);
// 取出目标节点,即带borderBox css类的节点
var linksDom = $(".borderBox"); //根据网址中的类来获取数据
// 遍历dom集数组
var arr = [];//创建最后的数组保存
linksDom.each((index, item) => { //
// 取出title,注意这里使用了$(item),而不是item本身
var obj = {};
// 下面都是一些选择器之类的,和jq用法类似
obj.img = $(".img .lazyImg", item).attr("data-lazysrc");
obj.redio = $(".img", item).attr("href");
obj.title = $(".img", item).attr("title");
obj.score = $(".score", item).text();
obj.intro = $(".txt .intro", item).text();
obj.year = $(".txt .year", item).text();
obj.name = $(".txt .name", item).text();
obj.actor = $(".txt .actor", item).text();
obj.descr = $(".txt .descr", item).text();
obj.url = $(".txt .url", item).text();
arr.push(obj);
// 类似地,取出链接地址
// 解码可选,为了让结果显示中文汉字更直观
// 输出到控制台预览结果
});
return res.json(arr); // result就是返回的数据,res是api传出的数据
});
// Json格式
//await res.send(res)
});
app.listen(3000, () => { //创建接口测试
console.log("3000");
});
完成,安装以上几个模块,node运行js,在浏览器输入http://localhost:3000/movie?start=1,看看效果~ start数字可以换,其他复杂的可以再根据网页来进行爬取更改参数之类的东西