Node.js抓取網(wǎng)站中文亂碼解決辦法
問題:Node.js抓取網(wǎng)站中文亂碼
async function getHtml(){
let res = await axios.get(publicPath+"/pic/")
console.log(res)
}如上代碼,axios默認(rèn)是以utf8的方式去解碼html
由于原網(wǎng)頁的編碼方式是gb2312 控制臺打印中文亂碼
_G?????_????????</b></a> </h3>\r\n' + '<p> ???????????????????????????????裬?????????????????G??????????????????????????????????? ????????? ??????????Σ??????????Щ???????????????????????????????????????????????... </p>\r\n' + `<span class="spanimg1">????
Node.js抓取網(wǎng)站中文亂碼解決辦法
stream嘗試了很多種方式都無效,最后想到流請求
我們以流的方式去請求網(wǎng)頁,因?yàn)榱鞫际嵌M(jìn)制數(shù)據(jù),當(dāng)我們獲取到所有的二進(jìn)制數(shù)據(jù)后,將其以原網(wǎng)頁的編碼方式去解碼即可!
步驟
1.引入 iconv-litenpm i iconv-lite
const axios = require('axios')
const cheerio = require('cheerio')
const iconv = require('iconv-lite')
//封裝請求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ā)送流請求
在函數(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)典代表作品,七里香吉他六線譜,原調(diào)bE選調(diào)C,CAPO夾三品,完整版共五張彈唱圖 片譜。感謝老姚吉他編配,并同步《七里香》吉他彈唱教學(xué)視頻,琴友們可以跟隨老師的示范講解練習(xí)起來。 曲... </p> <span class="spanimg1">分類: <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">來源:未知 </span> <span class="spanimg3">2020-12-25</span>
以上就是Node.js抓取網(wǎng)站中文亂碼解決辦法的詳細(xì)內(nèi)容,更多關(guān)于Node.js抓取網(wǎng)站中文亂碼解決辦法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
利用Node.js和MySQL實(shí)現(xiàn)創(chuàng)建API服務(wù)器
這篇文章主要為大家詳細(xì)介紹了如何使用Node.js和MySQL創(chuàng)建API服務(wù)器的步驟,這也是從前端邁向全棧的一個(gè)開始,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-01-01
node創(chuàng)建Vue項(xiàng)目步驟詳解
在本篇文章里小編給大家整理的是關(guān)于node創(chuàng)建Vue項(xiàng)目步驟詳解內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-03-03
nodejs 實(shí)現(xiàn)MQTT協(xié)議的服務(wù)器端和客戶端的雙向交互的過程
這篇文章主要介紹了nodejs 實(shí)現(xiàn)MQTT協(xié)議的服務(wù)器端和客戶端的雙向交互的過程,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11
詳解使用Node.js 將txt文件轉(zhuǎn)為Excel文件
這篇文章主要介紹了詳解使用Node.js 將txt文件轉(zhuǎn)為Excel文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
node.js中的events.emitter.removeAllListeners方法使用說明
這篇文章主要介紹了node.js中的events.emitter.removeAllListeners方法使用說明,本文介紹了events.emitter.removeAllListeners 的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12

