情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

cheerioの使い方――日本語を扱う

cheerioモジュールの基本的な使用方法に関しては下の記事を参照してください。

日本語

cheerioモジュールで日本語を含むHTMLドキュメントを取り扱う際には注意しなければならない点があります。

それはcheerio.load関数を使用してDOMを作成する際に第2引数のdecodeEntitiesオプションをfalseに設定しなければHTML要素のHTMLの取得時にひらがな、カタカナ、漢字などが全てエスケープされてしまうということです。

たとえば、下のようなHTMLドキュメントからDOMを作成し、$.html関数を使用してそのままHTMLドキュメント全体のHTMLを取得すると下のようになります。

<!DOCTYPE html>
<html>
        <head>
                <meta charset="UTF-8">
                <title>タイトル</title>
        </head>
        <body>
                <p id="p1" class="odd">段落1</p>
                <p id="p2" class="even">段落2</p>
                <p id="p3" class="odd">段落3</p>
                <p id="p4" class="even">段落4</p>
                <p id="p5" class="odd">段落5</p>
        </body>
</html>
<!DOCTYPE html>
<html>
        <head>
                <meta charset="UTF-8">
                <title>&#x30BF;&#x30A4;&#x30C8;&#x30EB;</title>
        </head>
        <body>
                <p id="p1" class="odd">&#x6BB5;&#x843D;1</p>
                <p id="p2" class="even">&#x6BB5;&#x843D;2</p>
                <p id="p3" class="odd">&#x6BB5;&#x843D;3</p>
                <p id="p4" class="even">&#x6BB5;&#x843D;4</p>
                <p id="p5" class="odd">&#x6BB5;&#x843D;5</p>
        </body>
</html>

漢字などが全てエスケープされていることが分かります。

これはdecodeEntitiesオプションのデフォルトがtrueであるためです。

decodeEntitiesオプションをfalseに設定するとエスケープされることはありません。

サンプルコード1

cheerio-decode-entities.js

var cheerio = require('cheerio');

var $ = cheerio.load(`
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>タイトル</title>
    </head>
    <body>
        <p id="p1" class="odd">段落1</p>
        <p id="p2" class="even">段落2</p>
        <p id="p3" class="odd">段落3</p>
        <p id="p4" class="even">段落4</p>
        <p id="p5" class="odd">段落5</p>
    </body>
</html>
`, {
    decodeEntities: false
});

console.log($.html());

使用パッケージ

  • cheerio
    npm install cheerioでインストールします。

実行結果

C:\work\node>node cheerio-decode-entities.js

<!DOCTYPE html>
<html>
        <head>
                <meta charset="UTF-8">
                <title>タイトル</title>
        </head>
        <body>
                <p id="p1" class="odd">段落1</p>
                <p id="p2" class="even">段落2</p>
                <p id="p3" class="odd">段落3</p>
                <p id="p4" class="even">段落4</p>
                <p id="p5" class="odd">段落5</p>
        </body>
</html>

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js