一、搭建node环境

可到node官网下载安装包,可根据自己的操作系统下载对应安装包,如window 64位操作系统,可下载对应的.mis安装文件

如图:
微信截图_20200711164336.png

根据指示向导一步步安装即可,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接口,如图所示:
微信截图_20200711173002.png

查看控制台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

最终获取热点新闻列表,如下所示:
微信截图_20200711174138.png


一凡
11 声望0 粉丝