一、搭建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
最终获取热点新闻列表,如下所示: