ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js が中国語の Web ページをクロールする文字化けの問題と解決策_node.js

Node.js が中国語の Web ページをクロールする文字化けの問題と解決策_node.js

WBOY
WBOYオリジナル
2016-05-16 16:14:491847ブラウズ

Node.js が utf-8 以外の中国語 Web ページをクロールすると文字化けが発生します。たとえば、NetEase のホームページのエンコードは gb2312 であり、クロール時に文字化けが発生します。

コードをコピー コードは次のとおりです:

var request = require('request')
var url = 'http://www.163.com'

request(url, function (err, res, body) {
console.log(本体)
})


iconv-lite を使用して を解決できます。

インストール

コードをコピー コードは次のとおりです:

npm install iconv-lite

同時に、Web サイトがブロックされないようにユーザー エージェントを変更しましょう:
コードをコピー コードは次のとおりです:

varoriginRequest = require('request')
var iconv = require('iconv-lite')
var ヘッダー = {
'ユーザーエージェント': 'Mozilla/5.0 (Macintosh; Intel Mac OS) }
関数リクエスト (URL、コールバック) {

var オプション = {
URL: URL、
エンコーディング: null、
ヘッダー: ヘッダー
}
OriginRequest(オプション、コールバック)
}

request(url, function (err, res, body) {

var html = iconv.decode(body, 'gb2312')
console.log(html)
})

コード化けの問題が解決されました

cheerio を使用して HTML を解析します

cheerio は、サーバー側の jQuery セレクターとして単純かつ大まかに理解でき、正規表現よりもはるかに直感的です。 インストール


npm インストール Cherio
request(url, function (err, res, body) {
var html = iconv.decode(body, 'gb2312')
var $ = Cheerio.load(html)
console.log($('h1').text())
console.log($('h1').html())
})


出力は次のとおりです


NetEase
NetEase


ここで問題が発生します。 $('h1').html() によって出力されるコードは Unicode でエンコードされており、文字処理に問題が生じます。

cheerio .html() の「文字化け」問題を解決する

ドキュメント
を確認して、エンティティのエンコーディングを変換する機能をオフにできることを確認してください

コードをコピー コードは次のとおりです: var $ = Cherio.load(html)


に変更します


コードをコピー コードは次のとおりです: var $ = Cheerio.load(html, {decodeEntities: false})

以上です。完全なコードは次のとおりです:


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。