You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中Axios请求网页HTML响应乱码问题求助

解决Axios请求亚马逊网页返回乱码的问题

问题描述

使用Axios请求亚马逊网页并通过Cheerio解析时,返回的HTML响应呈现为乱码(如�a��{t��这类字符),尝试重新编码为UTF-8、改用HTTP协议均无效。

相关代码

const axios = require('axios');
const cheerio = require('cheerio');

axios.get('https://www.amazon.co.uk/Acer-XF243YPbmiiprx-Monitor-FreeSync-Adjustable/dp/B097F6DT45')
    .then((response) => {
        if (response.status === 200) {
            const html = response.data;
            const $ = cheerio.load(html);
            console.log($.html())
        }
    }, (error) => console.log(err));

当前乱码响应示例

�Sn����M�٠��g���+=�������&x��.�@!�Q36�%�[�H�+ݴ�|��_/��d�8_
K�b&E�_�}[U1�@u梅Y����{T6ǞOrt��q���ri����eJ(���w����~}S�
    �4/��&�2�y���X, �Ǥ���0b�n��PS6O��kY��=�2k�Z��K�Z��r�t
    A4�����c���vnY�{t���u�_���C��C&��u����W)���He���O�X��
        �]P�
    ��Ѐ�(�?�,y�m����b��|6���B�|�l6��ݻ+&�6�/vH�O�oX�;�X�s 
    [����I��&��U �����v�=�vR{��֥����L�r��tG�l�ܓY�N)����(
        �(����qX���Z=f�b�-�����At舮�^U6���ف{�h�w�p���m��ϝ

解决方案

原因分析

亚马逊对请求做了GZIP压缩处理,Axios若未正确配置自动解压,会直接拿到二进制压缩数据,解析后出现乱码;同时亚马逊会检测请求头,缺少浏览器标识的请求可能返回异常内容。

具体解决步骤

  1. 配置Axios自动解压+模拟浏览器请求头
    在请求配置中显式开启解压功能,并添加User-Agent、Accept等浏览器标识,让服务器返回正常可解析的内容。

修改后的代码:

const axios = require('axios');
const cheerio = require('cheerio');

axios.get('https://www.amazon.co.uk/Acer-XF243YPbmiiprx-Monitor-FreeSync-Adjustable/dp/B097F6DT45', {
    headers: {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, br'
    },
    decompress: true
})
.then((response) => {
    if (response.status === 200) {
        const html = response.data;
        const $ = cheerio.load(html);
        console.log($.html());
    }
})
.catch((error) => console.log(error));
  1. 手动解压备选方案
    如果自动解压仍失效,可借助zlib模块手动处理压缩数据:

    const axios = require('axios');
    const cheerio = require('cheerio');
    const zlib = require('zlib');
    
    axios.get('https://www.amazon.co.uk/Acer-XF243YPbmiiprx-Monitor-FreeSync-Adjustable/dp/B097F6DT45', {
        headers: {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
            'Accept-Encoding': 'gzip'
        },
        responseType: 'arraybuffer' // 以二进制格式接收数据
    })
    .then((response) => {
        let html;
        // 判断压缩类型并解压
        if (response.headers['content-encoding'] === 'gzip') {
            html = zlib.gunzipSync(response.data).toString('utf8');
        } else {
            html = response.data.toString('utf8');
        }
        const $ = cheerio.load(html);
        console.log($.html());
    })
    .catch((error) => console.log(error));
    
  2. 额外注意
    亚马逊有反爬机制,频繁请求可能触发IP封禁,建议添加请求间隔或使用代理IP。

内容的提问来源于stack exchange,提问作者TriThomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:50:20