Node.js haben stumpfe Codeprobleme, wenn chinesische Webseiten, die nicht UTF-8 sind, kriechen. Zum Beispiel beträgt die Homepage -Codierung von Netease GB2312, und verstümmelte Codes haben beim Krabbeln verstümmte Codes.
Die Codekopie lautet wie folgt:
var request = fordert ('request')
var url = 'http://www.163.com'
Request (URL, Funktion (Err, Res, Body) {
console.log (Körper)
})
Sie können iConv-lite verwenden, um es zu lösen
Installieren
Die Codekopie lautet wie folgt:
NPM ICONV-LITE INSTALLIERT
Gleichzeitig werden wir den Benutzer-Agent ändern, um zu verhindern, dass die Website blockiert:
Die Codekopie lautet wie folgt:
var OriginRequest = Anforderung ('Anfrage')
var iconv = require ('iconv-lite')
var headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS x 10_10_1) AppleWebkit/537.36 (KHTML, wie Gecko) Chrome/39.0.2171.65 Safari/537.36'
}
Funktionsanforderung (URL, Rückruf) {
var options = {
URL: URL,
Codierung: null,
Header: Header
}
OriginRequest (Optionen, Rückruf)
}
Request (URL, Funktion (Err, Res, Body) {
var html = iconv.decode (Körper, 'GB2312')
console.log (html)
})
Lösen Sie das verstümmelte Problem
Verwenden Sie Cheatio, um HTML zu analysieren
Cheerio kann einfach und grob als serverseitiger JQuery-Selektor verstanden werden. Damit ist es viel intuitiver als regelmäßig
Installieren
Die Codekopie lautet wie folgt:
NPM BASEIO INSTALLIEREN
Request (URL, Funktion (Err, Res, Body) {
var html = iconv.decode (Körper, 'GB2312')
var $ = Cheeseio.load (HTML)
console.log ($ ('h1'). text ())
console.log ($ ('h1'). html ())
})
Die Ausgabe ist wie folgt
Die Codekopie lautet wie folgt:
Netase
Netase
Die Frage ist also, dass die Codeausgabe von $ ('H1'). HTML () Unicode codiert ist, und Netase ist zu einem Netase geworden, was einige Probleme in unserer Charakterverarbeitung verursacht hat.
Lösen Sie das Problem von "verstümmelt" in Cheatio.html ()
Wenn Sie sich die Dokumentation ansehen, können Sie die Funktion der Konvertierung der Entitätskodierung ausschalten.
Die Codekopie lautet wie folgt:
var $ = Cheeseio.load (HTML)
Wechseln zu
Die Codekopie lautet wie folgt:
var $ = Cheeseio.load (HTML, {DecodeEntities: False})
Das ist richtig, der vollständige Code lautet wie folgt:
Die Codekopie lautet wie folgt:
var OriginRequest = Anforderung ('Anfrage')
var Cheeseio = erfordern ('Cheerio')
var iconv = require ('iconv-lite')
var headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS x 10_10_1) AppleWebkit/537.36 (KHTML, wie Gecko) Chrome/39.0.2171.65 Safari/537.36'
}
Funktionsanforderung (URL, Rückruf) {
var options = {
URL: URL,
Codierung: null,
Header: Header
}
OriginRequest (Optionen, Rückruf)
}
var url = 'http://www.163.com'
Request (URL, Funktion (Err, Res, Body) {
var html = iconv.decode (Körper, 'GB2312')
var $ = Cheeseio.load (HTML, {DecodeEntities: False})
console.log ($ ('h1'). text ())
console.log ($ ('h1'). html ())
})