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. 需要引入的模块(包括:axios
、iconv
)
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 语句。