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

