js抓取普通话网页乱码难点和消除措施

作者: 计算机网络技术  发布:2019-09-06

Node.js 抓取非 utf-8 的华语网页时会出现乱码难题,比方和讯的首页编码是 gb2312,抓取时会出现乱码

Node.js抓取汉语网页乱码难点和减轻办法,node.js普通话网页

Node.js 抓取非 utf-8 的华语网页时会出现乱码难点,比方新浪的首页编码是 gb2312,抓取时会出现乱码

复制代码 代码如下:

var request = require('request') 
var url = ''

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

能够利用 iconv-lite 来消除

安装

复制代码 代码如下:

npm install iconv-lite 

再者大家顺带把 user-agent 修改一下,防止网址屏蔽:

复制代码 代码如下:

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 能够简单暴虐的明白为劳动器端 jQuery 选用器,有了它,比正则要更为直观多数

安装

复制代码 代码如下:

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())
})

出口如下

复制代码 代码如下:

网易
网易

这正是说难题来了,$('h1').html() 输出的代码是通过 Unicode 编码的,乐乎形成了新浪,给大家的字符管理带来了一部分烦劳

解决 cheerio .html() 「乱码」问题 查阅文书档案可见,能够关闭那几个调换实体编码的效能

复制代码 代码如下:

var $ = cheerio.load(html) 

改成

复制代码 代码如下:

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

就可以,完整代码如下:

复制代码 代码如下:

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 = ''

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())
})

Node.js 抓取非 utf-8 的中文网页时会现身乱码难题,举例乐乎的首页编码是 gb2312,抓...

复制代码 代码如下:

var request = require('request') 
var url = ''

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

能够行使 iconv-lite来解决

安装

复制代码 代码如下:

npm install iconv-lite 

并且大家顺带把 user-agent 修改一下,以防网址屏蔽:

复制代码 代码如下:

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能够归纳无情的知情为劳动器端 jQuery 采用器,有了它,比正则要特别直观多数

安装

复制代码 代码如下:

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())
})

输出如下

复制代码 代码如下:

网易
网易

那正是说难题来了,$('h1').html() 输出的代码是透过 Unicode 编码的,今日头条改为了和讯,给我们的字符管理带来了部分烦劳

解决 cheerio .html() 「乱码」问题 查阅文档可以,能够关闭那一个转变实体编码的机能

复制代码 代码如下:

var $ = cheerio.load(html) 

改成

复制代码 代码如下:

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

就能够,完整代码如下:

复制代码 代码如下:

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 = ''

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())
})

你或然感兴趣的小说:

  • 选用NodeJS和PhantomJS抓取网站页面音讯以及网址截图
  • 行使phantomjs举行网页抓取的贯彻代码
  • nodejs通过phantomjs完毕下载网页
  • Node.js落成的简短式网球页抓取效率示例
  • node.js抓取并深入分析网页内容有无特殊内容的js文件
  • Node.JS利用PhantomJs抓取网页入门教程

本文由今晚买四不像发布于计算机网络技术,转载请注明出处:js抓取普通话网页乱码难点和消除措施

关键词: