欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js抓取中文網(wǎng)頁亂碼問題和解決方法

 更新時間:2015年02月10日 09:54:50   投稿:junjie  
這篇文章主要介紹了Node.js抓取中文網(wǎng)頁亂碼問題和解決方法,本文講解了使用一些開源庫解決抓取中出現(xiàn)的亂碼問題,需要的朋友可以參考下

Node.js 抓取非 utf-8 的中文網(wǎng)頁時會出現(xiàn)亂碼問題,比如網(wǎng)易的首頁編碼是 gb2312,抓取時會出現(xiàn)亂碼

復(fù)制代碼 代碼如下:

var request = require('request') 
var url = 'http://www.163.com'

request(url, function (err, res, body) { 
    console.log(body)
})


可以使用 iconv-lite 來解決

安裝

復(fù)制代碼 代碼如下:

npm install iconv-lite 

同時我們順帶把 user-agent 修改一下,以防網(wǎng)站屏蔽:
復(fù)制代碼 代碼如下:

var originRequest = require('request') 
var iconv = require('iconv-lite') 
var headers = { 
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36'
}

function request (url, callback) { 
  var options = {
    url: url,
    encoding: null,
    headers: headers
  }
  originRequest(options, callback)
}

request(url, function (err, res, body) { 
    var html = iconv.decode(body, 'gb2312')
    console.log(html)
})

亂碼問題解決

使用 cheerio 解析 HTML

cheerio 可以簡單粗暴的理解為服務(wù)器端 jQuery 選擇器,有了它,比正則要更加直觀許多

安裝

復(fù)制代碼 代碼如下:

npm install cheerio 
request(url, function (err, res, body) { 
    var html = iconv.decode(body, 'gb2312')
    var $ = cheerio.load(html)
    console.log($('h1').text())
    console.log($('h1').html())
})

輸出如下
復(fù)制代碼 代碼如下:

網(wǎng)易
网易

那么問題來了,$('h1').html() 輸出的代碼是經(jīng)過 Unicode 編碼的,網(wǎng)易變成了网易,給我們的字符處理帶來了一些麻煩

解決 cheerio .html() 「亂碼」問題
查閱文檔可知,可以關(guān)閉這個轉(zhuǎn)換實體編碼的功能

復(fù)制代碼 代碼如下:

var $ = cheerio.load(html) 

改成
復(fù)制代碼 代碼如下:

var $ = cheerio.load(html, {decodeEntities: false})

即可,完整代碼如下:
復(fù)制代碼 代碼如下:

var originRequest = require('request') 
var cheerio = require('cheerio') 
var iconv = require('iconv-lite') 
var headers = { 
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36'
}

function request (url, callback) { 
  var options = {
    url: url,
    encoding: null,
    headers: headers
  }
  originRequest(options, callback)
}

var url = 'http://www.163.com'

request(url, function (err, res, body) { 
    var html = iconv.decode(body, 'gb2312')
    var $ = cheerio.load(html, {decodeEntities: false})
    console.log($('h1').text())
    console.log($('h1').html())
})

相關(guān)文章

  • 基于NodeJS的前后端分離的思考與實踐(二)模版探索

    基于NodeJS的前后端分離的思考與實踐(二)模版探索

    在傳統(tǒng)的開發(fā)模式中,瀏覽器端與服務(wù)器端是由不同的前后端兩個團隊開發(fā),但是模版卻又在這兩者中間的模糊地帶。因此模版上面總不可避免的越來越多復(fù)雜邏輯,最終難以維護。
    2014-09-09
  • node.js生成與讀取csv文件方法詳解

    node.js生成與讀取csv文件方法詳解

    這篇文章主要介紹了node.js生成與讀取csv文件方法詳解,需要的朋友可以參考下
    2022-10-10
  • NodeJS創(chuàng)建最簡單的HTTP服務(wù)器

    NodeJS創(chuàng)建最簡單的HTTP服務(wù)器

    這篇文章主要介紹了NodeJS創(chuàng)建最簡單的HTTP服務(wù)器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Node.js中Process.nextTick()和Process.setImmediate()的區(qū)別

    Node.js中Process.nextTick()和Process.setImmediate()的區(qū)別

    這篇文章介紹了Node.js中Process.nextTick()和Process.setImmediate()的區(qū)別,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Node.js 使用axios讀寫influxDB的方法示例

    Node.js 使用axios讀寫influxDB的方法示例

    這篇文章主要介紹了Node.js 使用axios讀寫influxDB的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • NodeJS整合銀聯(lián)網(wǎng)關(guān)支付(DEMO)

    NodeJS整合銀聯(lián)網(wǎng)關(guān)支付(DEMO)

    這篇文章主要介紹了NodeJS整合銀聯(lián)網(wǎng)關(guān)支付DEMO的相關(guān)資料非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • 更新Node.js的四種方法小結(jié)

    更新Node.js的四種方法小結(jié)

    Node.js是一個開放源代碼的跨平臺JavaScript運行環(huán)境,它在不同的平臺上都得到了廣泛使用和支持,強大的生態(tài)系統(tǒng)、持續(xù)的更新和不斷改進的性能使得Node.js非常受歡迎,然而,更新Node.js仍然是一個必要的過程,本文給大家介紹一些有關(guān)如何更新Node.js的方法
    2023-11-11
  • NodeJS實現(xiàn)自定義流的方法

    NodeJS實現(xiàn)自定義流的方法

    在 NodeJS 中要想實現(xiàn)自定義流,需要依賴模塊 stream ,直接引入,不需下載,所有種類的流都是繼承這個模塊內(nèi)部提供的對應(yīng)不同種類的類來實現(xiàn)的。接下來通過本文給大家介紹NodeJS實現(xiàn)自定義流的方法,一起看看吧
    2018-08-08
  • node文件批量重命名的方法示例

    node文件批量重命名的方法示例

    本篇文章主要介紹了node文件批量重命名的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 詳解Node.js中path模塊的resolve()和join()方法的區(qū)別

    詳解Node.js中path模塊的resolve()和join()方法的區(qū)別

    這篇文章主要介紹了詳解Node.js中path模塊的resolve()和join()方法的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10

最新評論