Node.js抓取網(wǎng)站中文亂碼解決辦法
問(wèn)題:Node.js抓取網(wǎng)站中文亂碼
async function getHtml(){
let res = await axios.get(publicPath+"/pic/")
console.log(res)
}如上代碼,axios默認(rèn)是以u(píng)tf8的方式去解碼html
由于原網(wǎng)頁(yè)的編碼方式是gb2312 控制臺(tái)打印中文亂碼
_G?????_????????</b></a> </h3>\r\n' + '<p> ???????????????????????????????裬?????????????????G??????????????????????????????????? ????????? ??????????Σ??????????Щ???????????????????????????????????????????????... </p>\r\n' + `<span class="spanimg1">????
Node.js抓取網(wǎng)站中文亂碼解決辦法
stream嘗試了很多種方式都無(wú)效,最后想到流請(qǐng)求
我們以流的方式去請(qǐng)求網(wǎng)頁(yè),因?yàn)榱鞫际嵌M(jìn)制數(shù)據(jù),當(dāng)我們獲取到所有的二進(jìn)制數(shù)據(jù)后,將其以原網(wǎng)頁(yè)的編碼方式去解碼即可!
步驟
1.引入 iconv-litenpm i iconv-lite
const axios = require('axios')
const cheerio = require('cheerio')
const iconv = require('iconv-lite')
//封裝請(qǐng)求html方法
async function getHtml(url){
let res = await axios.get(
url,{
responseType: 'stream'
})
return new Promise(resolve=>{
let chunks = []
res.data.on('data',chunk=>{
chunks.push(chunk)
})
res.data.on('end',()=>{
let buffer = Buffer.concat(chunks)
let str = iconv.decode(buffer,'gb2312')
resolve(str)
})
})
}getHtml用于發(fā)送流請(qǐng)求
在函數(shù)內(nèi)部封裝了promise,
promise里面的res.data是一個(gè)可讀流當(dāng)獲取到流數(shù)據(jù)時(shí),我們及將其添加到chunks數(shù)組。
流數(shù)據(jù)獲取完畢后,將二進(jìn)制數(shù)據(jù)連接,并設(shè)置解碼方式為gb2312
最好用cheerio封裝一下
async function getData(){
const html = await getHtml(publicPath+"/pic/")
const $ = cheerio.load(html)
console.log($.html())
}
getData()解碼后的數(shù)據(jù)
七里香》吉他譜,周杰倫的經(jīng)典代表作品,七里香吉他六線(xiàn)譜,原調(diào)bE選調(diào)C,CAPO夾三品,完整版共五張彈唱圖 片譜。感謝老姚吉他編配,并同步《七里香》吉他彈唱教學(xué)視頻,琴友們可以跟隨老師的示范講解練習(xí)起來(lái)。 曲... </p> <span class="spanimg1">分類(lèi): <a href="/geshou/Cdiaodanchangpu_1258_1.html" rel="external nofollow" target="_blank">C調(diào)彈唱譜</a> <a href="/geshou/jitajiaoxueshipin_5348_1.html" rel="external nofollow" target="_blank">吉他教學(xué)視頻</a> </span> <span class="spanimg2">來(lái)源:未知 </span> <span class="spanimg3">2020-12-25</span>
以上就是Node.js抓取網(wǎng)站中文亂碼解決辦法的詳細(xì)內(nèi)容,更多關(guān)于Node.js抓取網(wǎng)站中文亂碼解決辦法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù)
這篇文章主要介紹了詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
Node.js API詳解之 string_decoder用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 string_decoder用法,結(jié)合實(shí)例形式分析了Node.js API中string_decoder的功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
深入了解 Node的多進(jìn)程服務(wù)實(shí)現(xiàn)
本文主要介紹了Node的多進(jìn)程服務(wù)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
node封裝一個(gè)控制臺(tái)進(jìn)度條插件???????詳情
這篇文章主要介紹了node封裝一個(gè)控制臺(tái)進(jìn)度條插件???????詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
node.js事件循環(huán)機(jī)制及與js區(qū)別詳解
這篇文章主要為大家介紹了node.js事件循環(huán)機(jī)制及與js區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Node.js 使用 gRPC從定義到實(shí)現(xiàn)過(guò)程詳解
gRPC是一個(gè)高性能、開(kāi)源的遠(yuǎn)程過(guò)程調(diào)用(RPC)框架,由 Google 開(kāi)發(fā),它支持多種編程語(yǔ)言,旨在簡(jiǎn)化和優(yōu)化分布式系統(tǒng)中的服務(wù)通信,本文給大家介紹Node.js 使用 gRPC從定義到實(shí)現(xiàn)過(guò)程,感興趣的朋友跟隨小編一起看看吧2024-07-07
詳解nodejs爬蟲(chóng)程序解決gbk等中文編碼問(wèn)題
本篇文章主要介紹了nodejs爬蟲(chóng)程序解決gbk等中文編碼問(wèn)題,解決了網(wǎng)頁(yè)的編碼與nodejs默認(rèn)編碼不一致造成的亂碼問(wèn)題,有興趣的可以了解一下2017-04-04

