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
.
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
npm pasang iconv-lite
Pada masa yang sama, mari kita ubah suai ejen pengguna untuk mengelakkan tapak web daripada disekat:
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
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
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
var $ = cheerio.load(html)
Tukar kepada
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())
})