Node.js用WEBスクレイピングモジュール

cheerio-httpcli

スクレイピングツールを作ってる所ですが、HTTPクライアントとして現在使用しているモジュールがこれ。
使い方はネットで検索すれば色々出てくるのですが、たまたまインストールディレクトリ見てたらREADMEファイルがすごくしっかり書かれてたのでびっくり。(当たり前?)
そして、npmの公式ページにもしっかり書かれてるのを今更気づく。。。
というか、モジュールインストールしておいて公式の情報を見ずにネット上の情報に頼ってしまうのはマズイですね。。。
と、いう事で公式情報の備忘録的な記事です。

気づいた点

  • 取得先ページの文字コードを自動判定してHTMLをUTF-8に変換してくれている。
  • メソッドだけ見るとGETリクエストしか出来ないかと思いきや、HTML取得後のフォームの送信やリンククリックも対応している。
  • User-Agentを切替可能。
  • XMLドキュメントのパース処理もできる。
  • 基本は静的HTMLを処理するモジュールのためSPAには対応していない。
  • fetch()をPromise形式で呼び出すと、thenのメソッドチェーンでTOPページにアクセス後、特定のリンクをクリックしてページ遷移して、更に。。というように順を追ってアクセスする事が可能になる。

検証

User-Agent切替

こちらのサイトで確認する。

var client = require('cheerio-httpcli');

client.setBrowser("ie");
client.fetch('https://www.cloudgate.jp/ua.php').then((result) => {
    console.log(result.$("body").text());
});

ユーザーエージェント確認サイト
Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko

client.setBrowser("firefox");
client.fetch('https://www.cloudgate.jp/ua.php').then((result) => {
    console.log(result.$("body").text());
});

ユーザーエージェント確認サイト
Mozilla/5.0 (Windows NT 10.0; rv:54.0) Gecko/20100101 Firefox/59.0

XMLパース

RSSフィードを読んでみる。

client.fetch('https://kmgt-system.work/feed/').then((result) => {
    console.log(result.$("item > title").first().text());
});

スクレイピングツール開発(2)

Webサイトを順々にアクセス

  1. 国税庁のHPにアクセス
  2. TOPページにある税務署検索のテキストBOXに「100-0001」を入力
  3. 検索
  4. 検索結果ページの1番目のリンクをクリック
  5. 税務署の所在地をスクレイピング

と、いうものをやろうとやろうとしたが国税庁の税務署検索ボタンは input[type=button] で JavaScriptのonclick()で検索するタイプだったのでcheerio-httpcliでは動作不能と分かった。
以下の要素ならclick()メソッドで動作可能との事。
input[type=submit]button[type=submit]input[type=image]

という事で単純にリンクを辿ってくシナリオに変更。

  1. 国税庁のHPにアクセス
  2. タックスアンサー(よくある税の質問)をクリック
  3. 科目別による検索の所得税をクリック
  4. 夫婦と税金をクリック
  5. 表の2行目の最初のリンクをクリック
  6. ページの内容を表示
client.fetch('http://www.nta.go.jp/').then((result) => {
    return result.$("div.flex.zei ul li:first-child a").click();
}).then((result) => {
    console.log(result.$("title").text());
    return result.$("ul.p20.row li:first-child a").click();
}).then((result) => {
    console.log(result.$("title").text());
    return result.$("div#bodyArea ul li:first-child a").click();
}).then((result) => {
    console.log(result.$("title").text());
    return result.$("table.table.table-bordered.datatable.width100 tr:nth-child(2) a:first-child").click();
}).then((result) => {
    console.log(result.$("div#contents").text());
});

タックスアンサー(よくある税の質問)|国税庁
所得税|国税庁
夫婦と税金|国税庁
ホーム税の情報・手続・用紙税について調べるタックスアンサー(よくある税の質問)所得税
No.1800 パート収入はいくらまで所得税がかからないか
No.1800 パート収入はいくらまで所得税がかからないか
[平成30年4月1日現在法令等]
 配偶者の収入がパート収入だけの場合、所得税に関して次の3つのことが問題になります。
1 配偶者本人の所得税の問題
 パートにより得る収入は、通常給与所得となります。給与所得の金額は、年収から給与所得控除額を差し引いた残額です。
~~省略~~

本当はタックスアンサー(よくある税の質問)ページにあるキーワード検索をしたかったのだけど。うまくいかず。
ボタンはbutton要素だけども、type属性が未指定になっているので、それが原因で動作しない気がします。もう少し試してみます。

ブロトピ:今日のブログ更新
ブロトピ:ブログ更新しました!

広告
ブログサークル
ブログにフォーカスしたコミュニティーサービス(SNS)。同じ趣味の仲間とつながろう!