使用Axios+Cheerio解析页面时俄文编码乱码显示问号问题
问题原因
爬取俄文站点时出现乱码,核心原因是目标站点使用windows-1251编码(俄语区站点常用非UTF-8编码),axios默认会以utf-8规则自动解析响应内容,编码不匹配就会导致俄文字符全部被转成问号。
修复步骤
- 安装编码转换依赖:执行命令
npm install iconv-lite - 修改axios请求配置,指定
responseType: 'arraybuffer'获取原始二进制响应,禁止axios自动做字符串转码 - 用iconv-lite将原始二进制数据按站点实际编码
windows-1251解码为正确字符串,再传入cheerio加载 - 原代码中重复请求了两次相同页面,冗余的
selector_2相关代码可以直接删除,减少无效请求
修复后完整代码
const axios = require('axios'); const cheerio = require('cheerio'); const iconv = require('iconv-lite'); const parse = async () => { const getHTML = async (url) => { const { data } = await axios.get(url, { responseType: 'arraybuffer' }) // 按站点实际编码解码 const correctHtml = iconv.decode(data, 'windows-1251') return cheerio.load(correctHtml) } const pageSelector = await getHTML('https://asu.edu.ru/universitet/5-kontaktnaia-informaciia.html') pageSelector('.container').each((i, element) => { const title = pageSelector(element).find('span').text(); console.log(title); }) }; parse();
补充:如果爬取其他俄语站点遇到同类乱码,可以先查看响应头
content-type字段或者页面meta标签的charset属性确认站点实际编码,替换解码时传入的编码参数即可。
内容的提问来源于stack exchange,提问作者Shaitan
相关产品推荐
相关产品推荐

