Node.jsで超簡単にスクレイピングを実装してみる
スクレイピングとは
Webスクレイピングとは、WebサイトからWebページのHTMLデータを収集して、特定のデータを抽出、整形し直すことである。
http://www.sophia-it.com/content/Webスクレイピング
よそ様のサイトのHTMLから情報を取得・解析して必要なデータを取得するという手法ですね。使用上の注意としてはページの内容をまるごと抽出してコピーサイトを作ったり、過剰にアクセスをして取得先のサーバーに負荷をかけるようなことはやめましょう。すんごい数のリクエストを投げたらDDoS攻撃と変わらなくなってしまいます。
Node.jsで実装してみる
だいたいJavaでもRubyでもPHPでもスクレイピング用のライブラリが用意されているようですが、今回はNode.jsで実装します。
今回はサンプルなのでこのブログの去年の記事一覧から記事タイトルをひっぱってみます。
スクレイピングで使用するライブラリはcheerio-httpcliを使ってみます。このライブラリはもともとcheerioというHTMLをjQueryライクにパースするモジュールにrequestやiconvなどスクレイピングするのに必要なモジュールを組み込んだパッケージです。
では実装してみます。
何はともあれpacakge.jsonにnpmを追加
pacakge.json
{ "name": "scraping_sample", "version": "0.0.1", "description": "scraping sample", "author": "Rei Matsushita", "license": "MIT", "dependencies": { "cheerio-httpcli":"*" } }
ほんでインスコ
$ npm install
んでんで実装側
app.js
// モジュール読み込み var client = require('cheerio-httpcli'); // スクレイピング開始 client.fetch('http://rei19.hatenablog.com/archive/2013', {}, function (err, $, res) { // 記事のタイトルを取得 $('.entry-title-link').each(function() { console.log($(this).text()); }); });
実装部分はこれだけです。めっさ少ない、かつjQueryっぽく取ってきたレスポンスの解析ができます。
もともとcheerio単体でもかなり幸せなのですが、こちらは他の必要なモジュールを内包しているのでかなり短いコードでスクレイピングを実現出来ます。
ちなみに出力結果は以下の通り
$ node app.js Node.js + Expressでロギングしてみる jQueryだけでコンテンツを自動スクロール表示してみる 続・Titanium Mobileで個人アプリをリリースしてみた結果 + iOS7対応でやったこととか OS X MavericksにアップデートしたらTitanium Studioが動かなくなって焦る JavaScriptで配列をソートする TypeScriptを試してみた 3 TypeScriptを試してみた 2 TypeScriptを試してみた 1 APエンジニアはコード書いてなんぼだと思う(ひどく個人的な意見です) jQueryでプレースホルダーを実装してみる jQueryの話 attrとpropの違い enchant.jsをTitanium Mobileで動かしてみる その1 Titanium Mobileで個人アプリをリリースしてみた結果 web系エンジニア限定!『エンジニアのキャリアをハックする』勉強会 感想 プロトタイプベースのjavascript設計 (2) プロトタイプベースのjavascript設計 (1) 1画面内でバージョンの異なるjQueryを共存させるには このブログについて
おお、ちゃんとタイトル取れていますね。
詳しい使い方は作者さんのページを見て下さい。リクエストのパラメータなんかも指定出来たりします。
http://www.npmjs.org/package/cheerio-httpcli
ちなみに取得先のページでJavaScriptを使った描画なんかをしていた場合は、レスポンスに入ってこないので、ブラウザでは表示されているけどスクレイピングしたら取れていないという状態になりますので注意してください。
ではでは。