Lorsque Node.js explore des pages Web chinoises non utf-8, des caractères tronqués apparaissent. Par exemple, le codage de la page d'accueil de NetEase est gb2312, et des caractères tronqués apparaissent lors de l'exploration
.
var requête = require('request')
var url = 'http://www.163.com'
request(url, function (err, res, body) {
console.log(corps)
})
Vous pouvez utiliser
iconv-lite pour résoudre
Installation
npm installe iconv-lite
En même temps, modifions le user-agent pour éviter que le site Web soit bloqué :
var originRequest = require('request')
var iconv = require('iconv-lite')
var en-têtes = {
« Agent utilisateur » : « Mozilla/5.0 (Macintosh ; Intel Mac OS
>
demande de fonction (url, rappel) {
options var = {
URL : URL,
encodage : nul,
en-têtes : en-têtes
>
originRequest(options, rappel)
>
request(url, function (err, res, body) {
var html = iconv.decode(body, 'gb2312')
console.log(html)
})
Problème de code tronqué résolu
Utilisez cheerio pour analyser le HTML
cheerio peut être compris simplement et grossièrement comme un sélecteur jQuery côté serveur. Avec lui, il est beaucoup plus intuitif que les expressions régulières.
Installation
npm installe cheerio
requête (url, fonction (err, res, corps) {
var html = iconv.decode(body, 'gb2312')
var $ = cheerio.load(html)
console.log($('h1').text())
console.log($('h1').html())
})
Le résultat est le suivant
NetEase
NetEase
Ensuite, voici le problème. Le code généré par $('h1').html() est codé en Unicode. NetEase est devenu NetEase, ce qui pose quelques problèmes au traitement de nos caractères
.
Résoudre le problème "brouillé" de cheerio .html()
Consultez le document pour savoir que vous pouvez désactiver la fonction de conversion du codage d'entité
var $ = cheerio.load(html)
Changer pour
var $ = cheerio.load(html, {decodeEntities : false})
Ça y est, le code complet est le suivant :
Copier le code Le code est le suivant :
var originRequest = require('request')
var cheerio = require('cheerio')
var iconv = require('iconv-lite')
var en-têtes = {
'User-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'
>
demande de fonction (url, rappel) {
options var = {
URL : URL,
encodage : nul,
en-têtes : en-têtes
>
originRequest(options, rappel)
>
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())
})