Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
電算部ネットワーク講座
03
Node.js Ⅲ
目次


今回の内容



Web スクレイピングとは



cheerio を用いた Web スクレイピング



cheerio の導入 (+ request)



request の設定



proxy 設定に関する注意事...
今回の内容


Node.js で Web スクレイピングをします。
Web スクレイピングとは


スクレイピングとは“削ること“という意味。



Web サイトから必要な情報をだけを削り取る (抽出する) 技術のことを Web ス
クレイピングといいます。



Web スクレイピングによって、 We...
cheerio を用いた Web スクレイピング


cheerio という Node.js で jQuery のように HTML 要素を操作できるモジュール
があります。



この他にも、 Node.js で動くものではありませんが、 ...
cheerio の導入


npm install cheerio



これだけ。



今回は cheerio に読み込ませる HTML をインターネット上から取得するため、
request というモジュールを使います。(プロキシも越...
request の設定


プロキシを越えるために request の設定をします。

// request と url モジュールの読み込み
var request = require("request");
var url = requi...
request の設定
続き



// URL に対して GET メソッドでリクエストを送る
request.get(URL, {
proxy: proxy
}, function (err, res, body) {
// エラー処理
i...
proxy 設定に関する注意事項


本学の proxy は HTTP Proxy です。



平文で学籍番号とパスワードが流れます → 通信経路に注意


大学のネットワーク以外で proxy 設定を解除しないまま接続すると危険

...
proxy 設定に関する注意事項


実行時にパスワードを入力させる



https://github.com/ww24/densan.info-networkcourse/tree/master/nodejs/03/



上記の p...
cheerio の使い方


jQuery とほぼ同じ書き方ができます。



→ CSS セレクタに近い表記で要素を選択できます。

// cheerio モジュールの読み込み
var cheerio = require("cheerio...
cheerio の注意点


cheerio は高速に動作する反面、 HTML 内の JavaScript は実行されません。



そのため、 JavaScript によって動的に読み込まれるコンテンツをスクレイピン
グすることはできない...
文字コードの問題


Node.js では ASCII, UTF-8, UTF-16LE の文字コードしか扱うことができませ
ん。



Shift-JIS や EUC-JP のような文字コードの文字列はそのままでは扱えません。



そ...
文字コードの問題


jschardet の導入



npm install jschardet



iconv の導入



iconv は C++ で書かれているので、インストール時にビルドされます。



そのビルド環境に ...
文字コードの問題


jschardet と iconv の使い方

// jschardet と iconv モジュールを読み込む
var jschardet = require("jschardet");
var Iconv = requ...
課題


cheerio で在学生情報サイト HITナビをスクレイピングして、Today’s Event を
表示するコードを書いて下さい。



余裕があれば、在学生 Topics を一覧表示するコードを追加してみてくださ
い。



...
Upcoming SlideShare
Loading in …5
×

後期講座03

Node.js で Web スクレイピング

  • Be the first to comment

  • Be the first to like this

後期講座03

  1. 1. 電算部ネットワーク講座 03 Node.js Ⅲ
  2. 2. 目次  今回の内容  Web スクレイピングとは  cheerio を用いた Web スクレイピング  cheerio の導入 (+ request)  request の設定  proxy 設定に関する注意事項  cheerio の使い方  cheerio の注意点  文字コードの問題  課題
  3. 3. 今回の内容  Node.js で Web スクレイピングをします。
  4. 4. Web スクレイピングとは  スクレイピングとは“削ること“という意味。  Web サイトから必要な情報をだけを削り取る (抽出する) 技術のことを Web ス クレイピングといいます。  Web スクレイピングによって、 Web サイトから必要な情報を抽出して使いや すく整形することができます。  例:  API を提供していない辞書サイトで自動的に調べ物をする。  RSS を提供していないサイトの新着情報を好きなフォーマットで取り出す。
  5. 5. cheerio を用いた Web スクレイピング  cheerio という Node.js で jQuery のように HTML 要素を操作できるモジュール があります。  この他にも、 Node.js で動くものではありませんが、 casperJS というスクレ イピングや自動テストのためのライブラリがあります。 (こちらの方が高機能です)  参考: http://thesportsbusiness.jp/archives/189  今回は導入が簡単で高速に動作する cheerio を使います。  補足 jQuery: ブラウザで DOM を手軽に操作するためのライブラリ
  6. 6. cheerio の導入  npm install cheerio  これだけ。  今回は cheerio に読み込ませる HTML をインターネット上から取得するため、 request というモジュールを使います。(プロキシも越えられます)  npm install request
  7. 7. request の設定  プロキシを越えるために request の設定をします。 // request と url モジュールの読み込み var request = require("request"); var url = require("url"); // proxy 接続用の URL を生成 (太字の user, pass は proxy の認証情報) var proxy = url.format({ protocol: "http", host: "proxy5.hit.ac.jp:8080", auth: user + ":" + pass });
  8. 8. request の設定 続き  // URL に対して GET メソッドでリクエストを送る request.get(URL, { proxy: proxy }, function (err, res, body) { // エラー処理 if (err) console.log(err); // cheerio で response body を読み込む var $ = cheerio.load(body); /* cheerio を用いた処理 */ });
  9. 9. proxy 設定に関する注意事項  本学の proxy は HTTP Proxy です。  平文で学籍番号とパスワードが流れます → 通信経路に注意  大学のネットワーク以外で proxy 設定を解除しないまま接続すると危険  proxy 設定を解除しないまま、暗号化設定の無い無線 LAN のアクセスポイントに接 続すると危険  また、コードの中にパスワードをそのまま書くこと (パスワードのハードコー ディング) はセキュリティ上よろしくないので、避ける  実行時にパスワードの入力を求めるように設計する
  10. 10. proxy 設定に関する注意事項  実行時にパスワードを入力させる  https://github.com/ww24/densan.info-networkcourse/tree/master/nodejs/03/  上記の password.js を参考にしてください。
  11. 11. cheerio の使い方  jQuery とほぼ同じ書き方ができます。  → CSS セレクタに近い表記で要素を選択できます。 // cheerio モジュールの読み込み var cheerio = require("cheerio"); // html の読み込み (html には html の文字列が入ります) var $ = cheerio.load(html); // html のタイトルを取得 (この部分が jQuery っぽい!) var pageTitle = $("title").text();
  12. 12. cheerio の注意点  cheerio は高速に動作する反面、 HTML 内の JavaScript は実行されません。  そのため、 JavaScript によって動的に読み込まれるコンテンツをスクレイピン グすることはできないので注意する必要があります。  また、 HTML パーサを使って動作しているため、 HTML として正しくない文字 列 (例: テンプレートファイル) を操作しようとすると、不具合が出る可能性が あります。
  13. 13. 文字コードの問題  Node.js では ASCII, UTF-8, UTF-16LE の文字コードしか扱うことができませ ん。  Shift-JIS や EUC-JP のような文字コードの文字列はそのままでは扱えません。  そこで、 UTF-8 へ変換してあげる必要があります。  今回は jschardet と iconv モジュールを使います。  jschardet は文字コードの判定  iconv は文字コード変換  を行います。
  14. 14. 文字コードの問題  jschardet の導入  npm install jschardet  iconv の導入  iconv は C++ で書かれているので、インストール時にビルドされます。  そのビルド環境に Python 2.x が必要です。  Python 2.7.5 Windows Installer  Python 2.7.5 をインストールしてから  npm install iconv  これで入ります。
  15. 15. 文字コードの問題  jschardet と iconv の使い方 // jschardet と iconv モジュールを読み込む var jschardet = require("jschardet"); var Iconv = require("iconv").Iconv; // text は文字コードの分からない文字列 var encoding = jschardet.detect(text).encoding; if (encoding !== "ascii" && encoding !== "utf-8") { // 文字コード変換 var iconv = new Iconv(charset.encoding, "UTF-8//TRANSLIT//IGNORE"); text = iconv.convert(text); } console.log(text);
  16. 16. 課題  cheerio で在学生情報サイト HITナビをスクレイピングして、Today’s Event を 表示するコードを書いて下さい。  余裕があれば、在学生 Topics を一覧表示するコードを追加してみてくださ い。  提出は GitHub で!  ネットワークチーム、初回は 6 人ほど居た気がするのですが… 気付いたら 2 人に減っていました。  今までは 6 人全員が追いつけるように気を配っていましたが、既に 2 人しか居 ないため、今回からレベルアップします。  先ずは、ネットワークチームはバージョン管理システム Git が使えるようにし ようと思います。

×