Cheerioを使用してリクエストを次のように解析します。
_var url = http://shop.nag.ru/catalog/16939.IP-videonablyudenie-OMNY/16944.IP-kamery-OMNY-c-vario-obektivom/16704.OMNY-1000-PRO;
request.get(url, function (err, response, body) {
console.log(body);
$ = cheerio.load(body);
console.log($(".description").html());
});
_
そして出力として私はコンテンツを見るが、読めない奇妙なエンコーディングで:
_//Plain body console.log(body) (p.s. russian chars):
<h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY - попробуйте найти лучше</span></h1><p style
// cheerio's console.log $(".description").html()
<h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY
_
ターゲットURLリンクコーディングはUTF-8形式です。では、なぜCheerioが私のエンコーディングを壊すのですか?
Iconvを使用して私の体の反応をエンコードしようとしています:
_var body1 = iconv.decode(body, "utf-8");
_
しかし、console.log($(".description").html());
は依然として奇妙なテキストを返します。
Cheerioは何も壊していません。出力中 HTMLエンティティ これは、HTML入力とまったく同じようにブラウザによってレンダリングされます。このスニペットを実行して、意味を確認してください。
<h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY - попробуйте найти лучше</span></h1>
<h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY - попробуйте найти лучше</span></h1>
たとえば、У
は、エンティティУ
が>
を表すのと同じように、HTMLエンティティとしてエンコードされた文字>
です。
ただし、エンコードされていないテキストを取得する場合は、decodeEntities
オプションをfalse
に設定できます。
const $ = cheerio.load(
`<h1><span style="font-size: 16px;">Уличная 3Мп IP HD камера OMNY - попробуйте найти лучше</span></h1>`,
{ decodeEntities: false }
);
console.log($('span').html())
// => Уличная 3Мп IP HD камера OMNY - попробуйте найти лучше
.as-console-wrapper{min-height:100%}
<script src="https://bundle.run/[email protected]"></script>
ç
、á
、é
などの特殊文字が含まれるページをcheerioで読み込もうとしたときに問題が発生しました。
Cheerioが機能する方法は、文字を本質的にデコードし、Unicode文字の数値HTMLエンコーディングを提示しようとすることです。
例:ç
の代わりにç
が返されます。
この問題を並べ替えるには、cheerio loadparamとしてdecodeEntities: false
を追加してこの構成をオフにする必要がありました。
const $ = cheerio.load(body, { decodeEntities: false });