小码哥的IT人生

首页 > JS > nodejs

node.js实例:axios模块根据URL获取网页源码

nodejs 2023-08-25 10:15:39小码哥的IT人生shichen

1. 核心代码部分:

//获取网页
async function getPage(url,charset = 'UTF-8'){
  var data;
  try {
      const res = await axios({
          method: 'get',
          url: url,
          responseType: "arraybuffer",
          headers:{
              'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/99.0.1150.36'
          }
      })
      data = iconv.decode(res.data, charset);//编码转换
  } catch (error) {
      // console.log('获取',url,'页面失败!',error)
      if (error.response && error.response.status === 404) {
          console.log('【******页面不存在******】');
      } else {
          console.log('抓取',url,'页面出错:', error.message);
      }
      data = "error:" + error.response?.status;
  }
  return data;
}

说明:这里 header 参数需要设置 user-agent ,用于模拟浏览器,以防止被检测为爬虫而无法获取到网页源码,这里使用: User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/99.0.1150.36

2. 需要引入的模块(包括:axiosiconv

const axios = require('axios');
const iconv = require('iconv-lite');

注:模块使用前需要 npm 安装,即:

npm install axios iconv-lite

3. 编码转换

由于不同的网页编码会有所不同,如:UTF-8、gb2312、gbk,因此需要进行 iconv 模块进行转码,对应代码为:

data = iconv.decode(res.data, charset);//编码转换

4. 网页返回值错误处理

网页源码抓取会遇到各种意外情况,如:404、501等。因此,需要针对错误返回值进行判断,这里针对 error.response 的返回值进行判定,代码如下:

error.response.status

5. 编码规范

对于代码的错误判定是编程中非常重要的一环,因此,这里使用了 try catch 语句。

版权所有 © 小码哥的IT人生
Copyright © phpcodeweb All Rights Reserved
ICP备案号:苏ICP备17019232号-2  

苏公网安备 32030202000762号

© 2021-2024