共计 2127 个字符,预计需要花费 6 分钟才能阅读完成。
一、搭建 node 环境
可到 node 官网下载安装包,可依据本人的操作系统下载对应安装包,如 window 64 位操作系统,可下载对应的.mis 安装文件
如图:
依据批示向导一步步装置即可,node 官网
二、搭建 koa 我的项目
参考文章“疾速搭建 koa 我的项目”
三、装置 axios
Axios 是一个基于 promise 的 HTTP 库,能够用在浏览器和 node.js 中,包含 get、post 等申请封装
1、装置 axios
npm install axios --save
2、axios 办法、根底用法
// get 申请 axios.get(url\[, config\]
axios.get('/logs')
.then(function (response) {console.log(response);
})
.catch(function (error) {console.log(error);
});
// post 申请 axios.get(url\[, config\]
axios.post('/logs')
.then(function (response) {console.log(response);
})
.catch(function (error) {console.log(error);
});
// 其它用法
axios.request(config)
axios.delete(url\[, config\]
axios.head(url[, config])
axios.options(url\[, config\]
axios.post(url\[, data\[, config\]\]
axios.put(url[, data[, config]])")
axios.patch(url\[, data\[, config\]\]
具体可参考 axios 文档
四、抓取内容
比方,咱们须要抓取某新闻页的热点新闻内容,那么首先咱们须要将该资源内容申请到本地,假如该新闻页的网址为 https://news.xxx.com/,如下所示:
const router = require('koa-router')()
const axios = require('axios');
router.get('/crawl', async (ctx, next) => {let res = await axios.get('https://news.xxx.com/');
console.log(res.data)
ctx.body = {data: 'text'}
})
module.exports = router
在浏览器中申请该爬虫 crawl 接口,如图所示:
查看控制台 res 打印内容,如下所示:
// 此处为模仿数据
{
// ...
data:`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>news</title>
</head>
<body>
<ul id="hots_news">
<li class="item">
<i class="icon"></i>
<a href="http://xxx"> 老王家的小猫会谈话 </a>
</li>
<li class="item">
<i class="icon"></i>
<a href="http://xxx"> 隔壁单元举办了一个舞会 </a>
</li>
<li class="item"><i class="icon"></i>
<a href="http://xxx"> 某超市卖出天价青菜 </a>
</li>
</ul>
<!-- 其它... -->
</body>
</html>`
}
能够发现,此时 res 是该页面的 html 源代码,并不是咱们想要获取的某些精准信息,那么此时则须要借助另外一个工具,将咱们须要的节点信息过滤出来
五、装置 cheerio
cheeiro 实现了外围 jQuery 的子集,能够在服务端像 juqery 一样对 dom 字符串进行操作,cheerio 官网.
参考上方获取到 res 数据,咱们须要的热点新闻就在标签 li.item
下,那么接下来将须要的 text 文本过滤出来即可,残缺代码如下所示:
const router = require('koa-router')()
const axios = require('axios');
const cheerio = require('cheerio')
router.get('/crawl', async (ctx, next) => {let res = await axios.get('https://news.xxx.com/');
console.log(res.data);
let $ = cheerio.load(res.data);
let list = Array.from($('#hots_news li a'));
let txtList = [];
list.map(element=>{txtList.push($(element).text())
})
ctx.body = {data: txtList}
})
module.exports = router
最终获取热点新闻列表,如下所示:
正文完