Node.js aura des problèmes de code brouillé lorsque vous rampez des pages Web chinoises qui ne sont pas UTF-8. Par exemple, l'encodage de la page d'accueil de NetEase est GB2312, et les codes brouillés auront des codes à brouillage lorsqu'ils ramperont.
La copie de code est la suivante:
var request = require ('demande')
var url = 'http://www.163.com'
demande (URL, fonction (err, res, corps) {
console.log (corps)
})
Vous pouvez utiliser iconv-lite pour le résoudre
Installer
La copie de code est la suivante:
NPM Installer iconv-lite
Dans le même temps, nous modifierons l'agent utilisateur pour empêcher le site Web de bloquer:
La copie de code est la suivante:
var originRequest = require ('requier')
var iconv = require ('iconv-lite')
var en-têtes = {
'Utilisateur-agent': 'Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_10_1) Applewebkit / 537.36 (Khtml, comme Gecko) Chrome / 39.0.2171.65 Safari / 537.36'
}
Request de fonction (URL, rappel) {
Var Options = {
URL: URL,
Encodage: NULL,
En-têtes: en-têtes
}
OriginRequest (Options, rappel)
}
demande (URL, fonction (err, res, corps) {
var html = iconv.decode (body, 'gb2312')
Console.log (HTML)
})
Résoudre le problème brouillé
Utilisez Cheatio pour analyser HTML
Cheerio peut être simplement compris et grossièrement comme un sélecteur jQuery côté serveur. Avec lui, c'est beaucoup plus intuitif que
Installer
La copie de code est la suivante:
NPM Installer Cheeseio
demande (URL, fonction (err, res, corps) {
var html = iconv.decode (body, 'gb2312')
var $ = cheeseio.load (html)
console.log ($ ('h1'). text ())
console.log ($ ('h1'). html ())
})
La sortie est la suivante
La copie de code est la suivante:
Netrease
Netrease
La question est donc que la sortie du code par $ ('h1'). Html () est encodé Unicode, et NetEase est devenu NetEase, ce qui a causé des problèmes dans le traitement de notre caractère.
Résolvez le problème de "Brized" dans Cherio.html ()
En regardant la documentation, vous pouvez désactiver la fonction du codage des entités de conversion.
La copie de code est la suivante:
var $ = cheeseio.load (html)
Passer à
La copie de code est la suivante:
var $ = cheeseio.load (html, {décodeentés: false})
C'est vrai, le code complet est le suivant:
La copie de code est la suivante:
var originRequest = require ('requier')
var cheeseio = require ('cheerio')
var iconv = require ('iconv-lite')
var en-têtes = {
'Utilisateur-agent': 'Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_10_1) Applewebkit / 537.36 (Khtml, comme Gecko) Chrome / 39.0.2171.65 Safari / 537.36'
}
Request de fonction (URL, rappel) {
Var Options = {
URL: URL,
Encodage: NULL,
En-têtes: en-têtes
}
OriginRequest (Options, rappel)
}
var url = 'http://www.163.com'
demande (URL, fonction (err, res, corps) {
var html = iconv.decode (body, 'gb2312')
var $ = cheeseio.load (html, {décodeentés: false})
console.log ($ ('h1'). text ())
console.log ($ ('h1'). html ())
})