情報アイランド

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

cheerioの主なAPI(3)走査

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

each関数

選択されている全てのHTML要素に対して処理を行います。

第1引数に処理を関数として指定します。この関数の第1引数はHTML要素のインデックスであり、第2引数はHTML要素です。また、この関数の中でthisはHTML要素を表します。

また、処理を現在のHTML要素で中断したい場合にはこの関数の返り値としてfalseを返します。

map関数

選択されている全てのHTML要素を別のHTML要素に変換します。

第1引数に変換処理を関数として指定します。この関数の第1引数はHTML要素のインデックスであり、第2引数はHTML要素です。また、この関数の中でthisはHTML要素を表します。

この関数では返り値として変換後のHTML要素かHTML要素の配列をセレクションかセレクションの配列として返すようにします。ただし、配列を返した場合には配列は平坦化されます。

返り値として変換後のHTML要素がセレクションとして得られます。

filter関数

選択されている全てのHTML要素をフィルタします。

第1引数にフィルタ処理を関数として指定します。この関数の第1引数はHTML要素のインデックスであり、第2引数はHTML要素です。また、この関数の中でthisはHTML要素を表します。この関数では返り値として真偽値を返すようにします。trueを返した場合にはHTML要素はフィルタを通過し、falseを返した場合にはHTML要素はフィルタに掛かります。

返り値として変換後のHTML要素がセレクションとして得られます。

not関数

選択されている全てのHTML要素をフィルタします。

第1引数にフィルタ処理を関数として指定します。この関数の第1引数はHTML要素のインデックスであり、第2引数はHTML要素です。また、この関数の中でthisはHTML要素を表します。この関数では返り値として真偽値を返すようにします。trueを返した場合にはHTML要素はフィルタに掛かり、falseを返した場合にはHTML要素はフィルタを通過します。

返り値として変換後のHTML要素がセレクションとして得られます。

first関数

選択されている最初のHTML要素を取得します。

返り値としてHTML要素がセレクションとして得られます。

last関数

選択されている最後のHTML要素を取得します。

返り値としてHTML要素がセレクションとして得られます。

eq関数

選択されているHTML要素からインデックスによりHTML要素を取得します。

第1引数にインデックスを指定します。

返り値としてHTML要素がセレクションとして得られます。

cheerio-traversing-1.js

var cheerio = require('cheerio');

var $ = cheerio.load(`
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>title</title>
    </head>
    <body>
        <p id="p1">paragraph 1</p>
        <p id="p2">paragraph 2</p>
        <p id="p3">paragraph 3</p>
        <p id="p4">paragraph 4</p>
        <p id="p5">paragraph 5</p>
    </body>
</html>
`);

$('p').filter(function (i, elem) {
    if ($(elem).attr('id') === 'p1') {
        return false;
    }
    else {
        return true;
    }
}).not(function (i, elem) {
    if ($(elem).attr('id') === 'p5') {
        return true;
    }
    else {
        return false;
    }
}).map(function (i, elem) {
    return '<div><p>' + $(elem).text() + '</p></div>';
}).each(function (i, elem) {
    console.log($(elem).html());
});

console.log($('p').first().text());
console.log($('p').last().text());
console.log($('p').eq(0).text());
console.log($('p').eq(1).text());
console.log($('p').eq(2).text());
console.log($('p').eq(3).text());
console.log($('p').eq(4).text());

実行結果

C:\work\node>node cheerio-traversing-1.js
<p>paragraph 2</p>
<p>paragraph 3</p>
<p>paragraph 4</p>
paragraph 1
paragraph 5
paragraph 1
paragraph 2
paragraph 3
paragraph 4
paragraph 5

next関数

選択されている最初のHTML要素の最も近傍にある弟要素を取得します。

第1引数にCSSセレクタを指定します。この引数は指定しなくても構いません。この引数を指定した場合にはCSSセレクタによって選択される弟要素の中で最も近傍にあるものが取得されます。

返り値としてHTML要素がセレクションとして得られます。

nextAll関数

選択されている最初のHTML要素の全ての弟要素を取得します。

第1引数にCSSセレクタを指定します。この引数は指定しなくても構いません。この引数を指定した場合にはCSSセレクタによって選択される全ての弟要素が取得されます。

返り値としてHTML要素がセレクションとして得られます。

prev関数

選択されている最初のHTML要素の最も近傍にある兄要素を取得します。

第1引数にCSSセレクタを指定します。この引数は指定しなくても構いません。この引数を指定した場合にはCSSセレクタによって選択される兄要素の中で最も近傍にあるものが取得されます。

返り値としてHTML要素がセレクションとして得られます。

prevAll関数

選択されている最初のHTML要素の全ての兄要素を取得します。

第1引数にCSSセレクタを指定します。この引数は指定しなくても構いません。この引数を指定した場合にはCSSセレクタによって選択される全ての兄要素が取得されます。

返り値としてHTML要素がセレクションとして得られます。

siblings関数

選択されている最初のHTML要素の全ての兄弟要素を取得します。

第1引数にCSSセレクタを指定します。この引数は指定しなくても構いません。この引数を指定した場合にはCSSセレクタによって選択される全ての兄弟要素が取得されます。

返り値としてHTML要素がセレクションとして得られます。

ただし、自分自身は取得されないことに注意してください。

children関数

選択されている最初のHTML要素の全ての子要素を取得します。

第1引数にCSSセレクタを指定します。この引数は指定しなくても構いません。この引数を指定した場合にはCSSセレクタによって選択される全ての子要素が取得されます。

返り値としてHTML要素がセレクションとして得られます。

parent関数

選択されている最初のHTML要素の親要素を取得します。

第1引数にCSSセレクタを指定します。この引数は指定しなくても構いません。この引数を指定した場合にはCSSセレクタによって選択される全ての親要素が取得されます。

返り値としてHTML要素がセレクションとして得られます。

cheerio-traversing-2.js

var cheerio = require('cheerio');

var $ = cheerio.load(`
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>title</title>
    </head>
    <body>
        <p id="p1">paragraph 1</p>
        <p id="p2">paragraph 2</p>
        <p id="p3">paragraph 3</p>
        <p id="p4">paragraph 4</p>
        <p id="p5">paragraph 5</p>
    </body>
</html>
`);

console.log($('#p3').next().html());
$('#p3').nextAll().each(function (i, elem) {
    console.log($(elem).html());
});

console.log($('#p3').prev().html());
$('#p3').prevAll().each(function (i, elem) {
    console.log($(elem).html());
});

$('#p3').siblings().each(function (i, elem) {
    console.log($(elem).html());
});

$('body').children().each(function (i, elem) {
    console.log($(elem).html());
});

$('#p3').parent().each(function (i, elem) {
    console.log($(elem).html());
});

実行結果

C:\work\node>node cheerio-traversing-2.js
paragraph 4
paragraph 4
paragraph 5
paragraph 2
paragraph 2
paragraph 1
paragraph 1
paragraph 2
paragraph 4
paragraph 5
paragraph 1
paragraph 2
paragraph 3
paragraph 4
paragraph 5

                <p id="p1">paragraph 1</p>
                <p id="p2">paragraph 2</p>
                <p id="p3">paragraph 3</p>
                <p id="p4">paragraph 4</p>
                <p id="p5">paragraph 5</p>

関連

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

-Node.js