O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Carregando em…3
×

Confira estes a seguir

1 de 16 Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Semelhante a 後期講座03 (20)

Anúncio

Mais de Takenori Nakagawa (20)

Mais recentes (20)

Anúncio

後期講座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 が使えるようにし ようと思います。

×