Node.js akan memiliki masalah kode yang kacau saat merangkak halaman web Cina yang bukan UTF-8. Misalnya, pengkodean beranda Netease adalah GB2312, dan kode -kode kacau akan memiliki kode yang kacau saat merangkak.
Salinan kode adalah sebagai berikut:
var request = membutuhkan ('permintaan')
var url = 'http://www.163.com'
permintaan (url, fungsi (err, res, body) {
Console.log (tubuh)
})
Anda dapat menggunakan ICONV-Lite untuk menyelesaikannya
Memasang
Salinan kode adalah sebagai berikut:
NPM Instal IconV-Lite
Pada saat yang sama, kami akan memodifikasi agen pengguna untuk mencegah situs web memblokir:
Salinan kode adalah sebagai berikut:
var originRequest = membutuhkan ('permintaan')
var iconv = membutuhkan ('iconv-lite')
var header = {
'Pengguna-Agen': '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'
}
permintaan fungsi (url, callback) {
var options = {
URL: URL,
Pengkodean: NULL,
Header: Header
}
OriginRequest (Opsi, Callback)
}
permintaan (url, fungsi (err, res, body) {
var html = iconv.decode (body, 'gb2312')
Console.log (html)
})
Selesaikan masalah yang kacau
Gunakan cheato untuk mengurai html
Cheerio dapat secara sederhana dan kasar dipahami sebagai pemilih jQuery sisi server. Dengan itu, itu jauh lebih intuitif daripada biasa
Memasang
Salinan kode adalah sebagai berikut:
NPM Pasang Cheeseio
permintaan (url, fungsi (err, res, body) {
var html = iconv.decode (body, 'gb2312')
var $ = cheeseio.load (html)
console.log ($ ('h1'). text ())
console.log ($ ('h1'). html ())
})
Outputnya adalah sebagai berikut
Salinan kode adalah sebagai berikut:
Netease
Netease
Jadi pertanyaannya adalah, output kode dengan $ ('H1'). HTML () adalah Unicode yang dikodekan, dan NetEase telah menjadi NetEase, yang telah menyebabkan beberapa masalah dalam pemrosesan karakter kami.
Selesaikan masalah "kacau" di cheato.html ()
Melihat dokumentasi, Anda dapat mematikan fungsi pengkodean entitas yang mengkonversi.
Salinan kode adalah sebagai berikut:
var $ = cheeseio.load (html)
Berubah menjadi
Salinan kode adalah sebagai berikut:
var $ = cheeseio.load (html, {decodeentities: false})
Benar, kode lengkapnya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
var originRequest = membutuhkan ('permintaan')
var cheeseio = membutuhkan ('cheerio')
var iconv = membutuhkan ('iconv-lite')
var header = {
'Pengguna-Agen': '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'
}
permintaan fungsi (url, callback) {
var options = {
URL: URL,
Pengkodean: NULL,
Header: Header
}
OriginRequest (Opsi, Callback)
}
var url = 'http://www.163.com'
permintaan (url, fungsi (err, res, body) {
var html = iconv.decode (body, 'gb2312')
var $ = cheeseio.load (html, {decodeentities: false})
console.log ($ ('h1'). text ())
console.log ($ ('h1'). html ())
})