Heim >Web-Frontend >js-Tutorial >Node.js crawlt verstümmelte Probleme chinesischer Webseiten und löst_node.js

Node.js crawlt verstümmelte Probleme chinesischer Webseiten und löst_node.js

WBOY
WBOYOriginal
2016-05-16 16:14:491877Durchsuche

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

Code kopieren Der Code lautet wie folgt:
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


Code kopieren Der Code lautet wie folgt:
npm install iconv-lite

Ändern wir gleichzeitig den Benutzeragenten, um zu verhindern, dass die Website blockiert wird:

Code kopieren Der Code lautet wie folgt:
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

Code kopieren Der Code lautet wie folgt: var $ = cheerio.load(html)

Wechseln Sie zu


Code kopieren Der Code lautet wie folgt: var $ = cheerio.load(html, {decodeEntities: false})

Der vollständige Code lautet wie folgt:


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn