SlideShare une entreprise Scribd logo
1  sur  16
電算部ネットワーク講座
03
Node.js Ⅲ
目次


今回の内容



Web スクレイピングとは



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



cheerio の導入 (+ request)



request の設定



proxy 設定に関する注意事項



cheerio の使い方



cheerio の注意点



文字コードの問題



課題
今回の内容


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

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



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



Web スクレイピングによって、 Web サイトから必要な情報を抽出して使いや
すく整形することができます。



例:


API を提供していない辞書サイトで自動的に調べ物をする。



RSS を提供していないサイトの新着情報を好きなフォーマットで取り出す。
cheerio を用いた Web スクレイピング


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



この他にも、 Node.js で動くものではありませんが、 casperJS というスクレ
イピングや自動テストのためのライブラリがあります。
(こちらの方が高機能です)



参考: http://thesportsbusiness.jp/archives/189



今回は導入が簡単で高速に動作する cheerio を使います。



補足
jQuery: ブラウザで DOM を手軽に操作するためのライブラリ
cheerio の導入


npm install cheerio



これだけ。



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



npm install request
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
});
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 を用いた処理 */
});
proxy 設定に関する注意事項


本学の proxy は HTTP Proxy です。



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

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



proxy 設定を解除しないまま、暗号化設定の無い無線 LAN のアクセスポイントに接
続すると危険



また、コードの中にパスワードをそのまま書くこと (パスワードのハードコー
ディング) はセキュリティ上よろしくないので、避ける



実行時にパスワードの入力を求めるように設計する
proxy 設定に関する注意事項


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



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



上記の password.js を参考にしてください。
cheerio の使い方


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



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

// cheerio モジュールの読み込み
var cheerio = require("cheerio");
// html の読み込み (html には html の文字列が入ります)

var $ = cheerio.load(html);
// html のタイトルを取得 (この部分が jQuery っぽい!)
var pageTitle = $("title").text();
cheerio の注意点


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



そのため、 JavaScript によって動的に読み込まれるコンテンツをスクレイピン
グすることはできないので注意する必要があります。



また、 HTML パーサを使って動作しているため、 HTML として正しくない文字
列 (例: テンプレートファイル) を操作しようとすると、不具合が出る可能性が
あります。
文字コードの問題


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



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



そこで、 UTF-8 へ変換してあげる必要があります。



今回は jschardet と iconv モジュールを使います。



jschardet は文字コードの判定



iconv は文字コード変換



を行います。
文字コードの問題


jschardet の導入



npm install jschardet



iconv の導入



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



そのビルド環境に Python 2.x が必要です。



Python 2.7.5 Windows Installer



Python 2.7.5 をインストールしてから



npm install iconv



これで入ります。
文字コードの問題


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);
課題


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



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



提出は GitHub で!



ネットワークチーム、初回は 6 人ほど居た気がするのですが… 気付いたら 2
人に減っていました。



今までは 6 人全員が追いつけるように気を配っていましたが、既に 2 人しか居
ないため、今回からレベルアップします。



先ずは、ネットワークチームはバージョン管理システム Git が使えるようにし
ようと思います。

Contenu connexe

Tendances

elasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたelasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたfurandon_pig
 
Maniaxセミナー
ManiaxセミナーManiaxセミナー
Maniaxセミナーbird 982000
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Shinsuke Sugaya
 
ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~Akihiro Kuwano
 
Webセキュリティ入門(xss)
Webセキュリティ入門(xss)Webセキュリティ入門(xss)
Webセキュリティ入門(xss)KageShiron
 
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムShinsuke Sugaya
 
今日からはじめるCSP(Kernel/VM@Okinawa)
今日からはじめるCSP(Kernel/VM@Okinawa)今日からはじめるCSP(Kernel/VM@Okinawa)
今日からはじめるCSP(Kernel/VM@Okinawa)cocoa_dahlia
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムHitoshi Asai
 
Wight: Phantom’s Perl friend - YAPC::Asia 2012
Wight: Phantom’s Perl friend - YAPC::Asia 2012Wight: Phantom’s Perl friend - YAPC::Asia 2012
Wight: Phantom’s Perl friend - YAPC::Asia 2012Hiroshi Shibamura
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップYasuhito Yabe
 
iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いiOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いniwatako
 
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!Naruhiko Ogasawara
 
BMXUG つきじ#4
BMXUG つきじ#4BMXUG つきじ#4
BMXUG つきじ#4K Kimura
 
Ma gician <wide version> @meguro.es 2019/10/10
Ma gician <wide version> @meguro.es 2019/10/10Ma gician <wide version> @meguro.es 2019/10/10
Ma gician <wide version> @meguro.es 2019/10/10Eucen Stew
 
qpstudy#5 懇親会LT riywo
qpstudy#5 懇親会LT riywoqpstudy#5 懇親会LT riywo
qpstudy#5 懇親会LT riywoRyosuke IWANAGA
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925Yu Ito
 

Tendances (20)

実践スクレイピング
実践スクレイピング実践スクレイピング
実践スクレイピング
 
elasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたelasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみた
 
Maniaxセミナー
ManiaxセミナーManiaxセミナー
Maniaxセミナー
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
 
ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~ザ・ドキュメント~うまくいかないNoSQL~
ザ・ドキュメント~うまくいかないNoSQL~
 
CSP Lv.2の話
CSP Lv.2の話CSP Lv.2の話
CSP Lv.2の話
 
Webセキュリティ入門(xss)
Webセキュリティ入門(xss)Webセキュリティ入門(xss)
Webセキュリティ入門(xss)
 
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステム
 
今日からはじめるCSP(Kernel/VM@Okinawa)
今日からはじめるCSP(Kernel/VM@Okinawa)今日からはじめるCSP(Kernel/VM@Okinawa)
今日からはじめるCSP(Kernel/VM@Okinawa)
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステム
 
Wight: Phantom’s Perl friend - YAPC::Asia 2012
Wight: Phantom’s Perl friend - YAPC::Asia 2012Wight: Phantom’s Perl friend - YAPC::Asia 2012
Wight: Phantom’s Perl friend - YAPC::Asia 2012
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
HTML5 on ASP.NET
HTML5 on ASP.NETHTML5 on ASP.NET
HTML5 on ASP.NET
 
WordPressとjQuery
WordPressとjQueryWordPressとjQuery
WordPressとjQuery
 
iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いiOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱い
 
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
 
BMXUG つきじ#4
BMXUG つきじ#4BMXUG つきじ#4
BMXUG つきじ#4
 
Ma gician <wide version> @meguro.es 2019/10/10
Ma gician <wide version> @meguro.es 2019/10/10Ma gician <wide version> @meguro.es 2019/10/10
Ma gician <wide version> @meguro.es 2019/10/10
 
qpstudy#5 懇親会LT riywo
qpstudy#5 懇親会LT riywoqpstudy#5 懇親会LT riywo
qpstudy#5 懇親会LT riywo
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925
 

Similaire à 後期講座03

20121112 jaws-ug sapporo8
20121112 jaws-ug sapporo820121112 jaws-ug sapporo8
20121112 jaws-ug sapporo8Hirokazu Ouchi
 
jsライブラリで実装する効率的なWeb制作
jsライブラリで実装する効率的なWeb制作jsライブラリで実装する効率的なWeb制作
jsライブラリで実装する効率的なWeb制作西畑 一馬
 
20150221 めとべや東京-プライベートコード共有サービス
20150221 めとべや東京-プライベートコード共有サービス20150221 めとべや東京-プライベートコード共有サービス
20150221 めとべや東京-プライベートコード共有サービスTakayoshi Tanaka
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~Kazunari Hara
 
HTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうHTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうyoshikawa_t
 
20110714 j queryベーシック
20110714 j queryベーシック20110714 j queryベーシック
20110714 j queryベーシック良太 増子
 
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Shotaro Suzuki
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説Akira Inoue
 
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介Shotaro Suzuki
 
121117 metro styleapp_templateapp
121117 metro styleapp_templateapp121117 metro styleapp_templateapp
121117 metro styleapp_templateappTakayoshi Tanaka
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)Masanori Ishigami
 
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインWebフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインShumpei Shiraishi
 
検索エンジンを有効利用するWEBサイト構築
検索エンジンを有効利用するWEBサイト構築検索エンジンを有効利用するWEBサイト構築
検索エンジンを有効利用するWEBサイト構築sato165 @delab
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようずOda Shinsuke
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 

Similaire à 後期講座03 (20)

20121112 jaws-ug sapporo8
20121112 jaws-ug sapporo820121112 jaws-ug sapporo8
20121112 jaws-ug sapporo8
 
jsライブラリで実装する効率的なWeb制作
jsライブラリで実装する効率的なWeb制作jsライブラリで実装する効率的なWeb制作
jsライブラリで実装する効率的なWeb制作
 
20150221 めとべや東京-プライベートコード共有サービス
20150221 めとべや東京-プライベートコード共有サービス20150221 めとべや東京-プライベートコード共有サービス
20150221 めとべや東京-プライベートコード共有サービス
 
iOS WebView App
iOS WebView AppiOS WebView App
iOS WebView App
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~
 
HTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうHTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろう
 
20110714 j queryベーシック
20110714 j queryベーシック20110714 j queryベーシック
20110714 j queryベーシック
 
WordPress と Bootstrap
WordPress と BootstrapWordPress と Bootstrap
WordPress と Bootstrap
 
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説
 
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips   Prism 4.5 & Kona project 等のご紹介
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
 
121117 metro styleapp_templateapp
121117 metro styleapp_templateapp121117 metro styleapp_templateapp
121117 metro styleapp_templateapp
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
 
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインWebフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
 
How To Drink Wsgi
How To Drink WsgiHow To Drink Wsgi
How To Drink Wsgi
 
検索エンジンを有効利用するWEBサイト構築
検索エンジンを有効利用するWEBサイト構築検索エンジンを有効利用するWEBサイト構築
検索エンジンを有効利用するWEBサイト構築
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
 
Pjax1
Pjax1Pjax1
Pjax1
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 

Plus de Takenori Nakagawa (20)

TensorFlow 入門
TensorFlow 入門TensorFlow 入門
TensorFlow 入門
 
機械学習を用いたパターンロック認証の強化手法
機械学習を用いたパターンロック認証の強化手法機械学習を用いたパターンロック認証の強化手法
機械学習を用いたパターンロック認証の強化手法
 
Docker で Deep Learning
Docker で Deep LearningDocker で Deep Learning
Docker で Deep Learning
 
GitHub Travis-CI Go!
GitHub Travis-CI  Go!GitHub Travis-CI  Go!
GitHub Travis-CI Go!
 
01.app
01.app01.app
01.app
 
Service Workers Push API Hands-on
Service Workers Push API Hands-onService Workers Push API Hands-on
Service Workers Push API Hands-on
 
Service Workers
Service WorkersService Workers
Service Workers
 
OpenGL 3DCG
OpenGL 3DCGOpenGL 3DCG
OpenGL 3DCG
 
WebGL
WebGLWebGL
WebGL
 
01:artificial life
01:artificial life01:artificial life
01:artificial life
 
後期05
後期05後期05
後期05
 
後期03
後期03後期03
後期03
 
後期02
後期02後期02
後期02
 
densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
 
phpck
phpckphpck
phpck
 
Git 初心者のための GitHub Pages
Git 初心者のための GitHub PagesGit 初心者のための GitHub Pages
Git 初心者のための GitHub Pages
 
OpenIL vol.1
OpenIL vol.1OpenIL vol.1
OpenIL vol.1
 
後期講座08
後期講座08後期講座08
後期講座08
 
後期講座07
後期講座07後期講座07
後期講座07
 
後期講座05
後期講座05後期講座05
後期講座05
 

Dernier

ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 

Dernier (7)

ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 

後期講座03

  • 2. 目次  今回の内容  Web スクレイピングとは  cheerio を用いた Web スクレイピング  cheerio の導入 (+ request)  request の設定  proxy 設定に関する注意事項  cheerio の使い方  cheerio の注意点  文字コードの問題  課題
  • 3. 今回の内容  Node.js で Web スクレイピングをします。
  • 4. Web スクレイピングとは  スクレイピングとは“削ること“という意味。  Web サイトから必要な情報をだけを削り取る (抽出する) 技術のことを Web ス クレイピングといいます。  Web スクレイピングによって、 Web サイトから必要な情報を抽出して使いや すく整形することができます。  例:  API を提供していない辞書サイトで自動的に調べ物をする。  RSS を提供していないサイトの新着情報を好きなフォーマットで取り出す。
  • 5. cheerio を用いた Web スクレイピング  cheerio という Node.js で jQuery のように HTML 要素を操作できるモジュール があります。  この他にも、 Node.js で動くものではありませんが、 casperJS というスクレ イピングや自動テストのためのライブラリがあります。 (こちらの方が高機能です)  参考: http://thesportsbusiness.jp/archives/189  今回は導入が簡単で高速に動作する cheerio を使います。  補足 jQuery: ブラウザで DOM を手軽に操作するためのライブラリ
  • 6. cheerio の導入  npm install cheerio  これだけ。  今回は cheerio に読み込ませる HTML をインターネット上から取得するため、 request というモジュールを使います。(プロキシも越えられます)  npm install request
  • 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. 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. proxy 設定に関する注意事項  本学の proxy は HTTP Proxy です。  平文で学籍番号とパスワードが流れます → 通信経路に注意  大学のネットワーク以外で proxy 設定を解除しないまま接続すると危険  proxy 設定を解除しないまま、暗号化設定の無い無線 LAN のアクセスポイントに接 続すると危険  また、コードの中にパスワードをそのまま書くこと (パスワードのハードコー ディング) はセキュリティ上よろしくないので、避ける  実行時にパスワードの入力を求めるように設計する
  • 11. cheerio の使い方  jQuery とほぼ同じ書き方ができます。  → CSS セレクタに近い表記で要素を選択できます。 // cheerio モジュールの読み込み var cheerio = require("cheerio"); // html の読み込み (html には html の文字列が入ります) var $ = cheerio.load(html); // html のタイトルを取得 (この部分が jQuery っぽい!) var pageTitle = $("title").text();
  • 12. cheerio の注意点  cheerio は高速に動作する反面、 HTML 内の JavaScript は実行されません。  そのため、 JavaScript によって動的に読み込まれるコンテンツをスクレイピン グすることはできないので注意する必要があります。  また、 HTML パーサを使って動作しているため、 HTML として正しくない文字 列 (例: テンプレートファイル) を操作しようとすると、不具合が出る可能性が あります。
  • 13. 文字コードの問題  Node.js では ASCII, UTF-8, UTF-16LE の文字コードしか扱うことができませ ん。  Shift-JIS や EUC-JP のような文字コードの文字列はそのままでは扱えません。  そこで、 UTF-8 へ変換してあげる必要があります。  今回は jschardet と iconv モジュールを使います。  jschardet は文字コードの判定  iconv は文字コード変換  を行います。
  • 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. 文字コードの問題  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. 課題  cheerio で在学生情報サイト HITナビをスクレイピングして、Today’s Event を 表示するコードを書いて下さい。  余裕があれば、在学生 Topics を一覧表示するコードを追加してみてくださ い。  提出は GitHub で!  ネットワークチーム、初回は 6 人ほど居た気がするのですが… 気付いたら 2 人に減っていました。  今までは 6 人全員が追いつけるように気を配っていましたが、既に 2 人しか居 ないため、今回からレベルアップします。  先ずは、ネットワークチームはバージョン管理システム Git が使えるようにし ようと思います。