Rumah  >  Artikel  >  hujung hadapan web  >  Node.js merangkak halaman web Cina masalah kacau-bilau dan solutions_node.js

Node.js merangkak halaman web Cina masalah kacau-bilau dan solutions_node.js

WBOY
WBOYasal
2016-05-16 16:14:491848semak imbas

Apabila Node.js merangkak halaman web bukan utf-8 Cina, aksara bercelaru akan muncul Contohnya, pengekodan halaman utama NetEase ialah gb2312 dan aksara bercelaru akan muncul apabila merangkak
.

Salin kod Kod adalah seperti berikut:

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

permintaan(url, fungsi (err, res, body) {
console.log(body)
})


Anda boleh menggunakan iconv-lite untuk menyelesaikan

Pemasangan

Salin kod Kod adalah seperti berikut:

npm pasang iconv-lite

Pada masa yang sama, mari kita ubah suai ejen pengguna untuk mengelakkan tapak web daripada disekat:
Salin kod Kod adalah seperti berikut:

var originRequest = memerlukan('request')
var iconv = memerlukan('iconv-lite')
pengepala var = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS }
permintaan fungsi (url, panggil balik) {

pilihan var = {
url: url,
pengekodan: null,
pengepala: pengepala
}
originRequest(pilihan, panggil balik)
}

permintaan(url, fungsi (err, res, body) {

var html = iconv.decode(body, 'gb2312')
console.log(html)
})

Masalah kod bercelaru diselesaikan

Gunakan cheerio untuk menghuraikan HTML

cheerio boleh difahami secara ringkas dan kasar sebagai pemilih jQuery sebelah pelayan Dengannya, ia jauh lebih intuitif daripada ungkapan biasa

Pemasangan


Salin kod Kod adalah seperti berikut:
npm pasang cheerio
permintaan(url, fungsi (err, res, body) {
var html = iconv.decode(body, 'gb2312')
var $ = cheerio.load(html)
console.log($('h1').text())
console.log($('h1').html())
})

Outputnya adalah seperti berikut

Salin kod Kod adalah seperti berikut:
NetEase
NetEase

Kemudian inilah masalahnya. Output kod oleh $('h1').html() dikodkan Unicode telah menjadi NetEase, yang membawa beberapa masalah kepada pemprosesan aksara kami

Selesaikan masalah "bercelaru" cheerio .html()
Semak
dokumen untuk mengetahui bahawa anda boleh mematikan fungsi menukar pengekodan entiti

Salin kod Kod adalah seperti berikut:
var $ = cheerio.load(html)

Tukar kepada

Salin kod Kod adalah seperti berikut:
var $ = cheerio.load(html, {decodeEntities: false})

Itu sahaja, kod lengkap adalah seperti berikut:

Salin kod Kod adalah seperti berikut:

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

permintaan fungsi (url, panggil balik) { 
  pilihan var = {
    url: url,
    pengekodan: null,
    pengepala: pengepala
  }
  originRequest(pilihan, panggil balik)
}

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

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

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn