Wenn Node.js nicht-utf-8-chinesische Webseiten crawlt, werden verstümmelte Zeichen angezeigt. Die Homepage-Codierung von NetEase ist beispielsweise gb2312, und beim Crawlen werden verstümmelte Zeichen angezeigt
var request = require('request')
var url = 'http://www.163.com'
request(url, function (err, res, body) {
console.log(body)
})
Sie können
iconv-lite
verwenden, um zu lösen
Installation
npm install iconv-lite
Ändern wir gleichzeitig den Benutzeragenten, um zu verhindern, dass die Website blockiert wird:
var originRequest = require('request')
var iconv = require('iconv-lite')
var headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS
}
Funktionsanforderung (URL, Rückruf) {
var-Optionen = {
URL: URL,
Kodierung: null,
Überschriften: Überschriften
}
originRequest(options, callback)
}
request(url, function (err, res, body) {
var html = iconv.decode(body, 'gb2312')
console.log(html)
})
Problem mit verstümmeltem Code gelöst
Verwenden Sie Cheerio, um HTML zu analysieren
cheerio
kann einfach und grob als serverseitiger jQuery-Selektor verstanden werden. Damit ist es viel intuitiver als reguläre Ausdrücke
Installation
npm install cheerio
request(url, function (err, res, body) {
var html = iconv.decode(body, 'gb2312')
var $ = cheerio.load(html)
console.log($('h1').text())
console.log($('h1').html())
})
Die Ausgabe ist wie folgt
NetEase
NetEase
Dann kommt das Problem. Der von $('h1').html() ausgegebene Code ist in NetEase codiert, was zu Problemen bei der Zeichenverarbeitung führt
Lösen Sie das „verstümmelte“ Problem von cheerio .html()
Überprüfen Sie das Dokument
, um herauszufinden, dass Sie die Funktion zum Konvertieren der Entitätskodierung deaktivieren können
Wechseln Sie zu
Der vollständige Code lautet wie folgt: