node.jsは、UTF-8ではない中国のWebページをrawっているときに、コードの問題が発生します。たとえば、NeteaseのホームページエンコーディングはGB2312であり、Carled Codeにはクロールするときにコードが刻まれています。
コードコピーは次のとおりです。
var request = require( 'request')
var url = 'http://www.163.com'
request(url、function(err、res、body){
console.log(body)
})
Iconv-Liteを使用して解決できます
インストール
コードコピーは次のとおりです。
npm iconv-liteをインストールします
同時に、ウェブサイトがブロックされないようにユーザーエージェントを変更します。
コードコピーは次のとおりです。
var OriginRequest = require( 'request')
var iconv = require( 'iconv-lite')
var headers = {
'user-agent': 'Mozilla/5.0(Macintosh; Intel Mac OS X 10_10_1)AppleWebkit/537.36(KHTML、YOMECKO)CHROME/39.0.2171.65 SAFARI/537.36' '
}
function request(url、callback){
var options = {
URL:URL、
エンコード:null、
ヘッダー:ヘッダー
}
OriginRequest(オプション、コールバック)
}
request(url、function(err、res、body){
var html = iconv.decode(body、 'gb2312')
console.log(html)
})
文字化けの問題を解決します
cheatioを使用してHTMLを解析します
Cheerioは、サーバー側のjQueryセレクターとして簡単かつ大まかに理解できます。それにより、それは通常よりもはるかに直感的です
インストール
コードコピーは次のとおりです。
NPMインストールCheeseio
request(url、function(err、res、body){
var html = iconv.decode(body、 'gb2312')
var $ = cheeseio.load(html)
console.log($( 'h1')。text())
console.log($( 'h1')。html())
})
出力は次のとおりです
コードコピーは次のとおりです。
netease
netease
したがって、問題は、コード出力が$( 'h1')で出力されます。html()はUnicodeエンコードされており、NeteaseはNetEaseになり、キャラクター処理にいくつかの問題を引き起こしました。
cheitio.html()で「文字化け」の問題を解決する
ドキュメントを見ると、エンティティエンコードを変換する機能をオフにすることができます。
コードコピーは次のとおりです。
var $ = cheeseio.load(html)
に変更します
コードコピーは次のとおりです。
var $ = cheeseio.load(html、{decodeentities:false})
そうです、完全なコードは次のとおりです。
コードコピーは次のとおりです。
var OriginRequest = require( 'request')
var cheeseio = require( 'chereio')
var iconv = require( 'iconv-lite')
var headers = {
'user-agent': 'Mozilla/5.0(Macintosh; Intel Mac OS X 10_10_1)AppleWebkit/537.36(KHTML、YOMECKO)CHROME/39.0.2171.65 SAFARI/537.36' '
}
function request(url、callback){
var options = {
URL:URL、
エンコード:null、
ヘッダー:ヘッダー
}
OriginRequest(オプション、コールバック)
}
var url = 'http://www.163.com'
request(url、function(err、res、body){
var html = iconv.decode(body、 'gb2312')
var $ = cheeseio.load(html、{decodeentities:false})
console.log($( 'h1')。text())
console.log($( 'h1')。html())
})