php网页抓取乱码(使用iconv-lite解决request乱码问题.js抓取非utf-8 )

优采云 发布时间: 2021-11-10 01:10

  php网页抓取乱码(使用iconv-lite解决request乱码问题.js抓取非utf-8

)

  使用 iconv-lite 解决请求乱码问题

  Node.js 在抓取非 utf-8 中文网页时会遇到乱码。比如网易的首页代码是gb2312,爬取就会出现乱码。

  var request = require('request')

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

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

})

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线