20130325 mldm monday spide r

60
20130325 MLDM Monday R 上的 spideR 寫作軍火庫 by c3h3

Transcript of 20130325 mldm monday spide r

Page 1: 20130325 mldm monday spide r

20130325 MLDM Monday

R 上的 spideR 寫作軍火庫

by c3h3 

Page 2: 20130325 mldm monday spide r

TW useR Group & MLDM Monday

● http://www.meetup.com/Taiwan-useR-Group/● http://www.facebook.com/TaiwanUseRGroup/● http://www.youtube.com/user/TWuseRGroup/● http://tw.use-r.net/

Page 3: 20130325 mldm monday spide r

關於講者

● Chia-Chi Chang (c3h3)● Chief of Data Scientist of InnovoTECH● TW useR Group / MLDM Monday 創辦人之一

● R 、Python 和 Maple 的愛用者● 平時喜歡分析各種類型的資料、買賣金融商品;另外,也喜歡閱讀各種數學理論、模型、以

及它們的應用......

Page 4: 20130325 mldm monday spide r

講題大綱

● spideR 寫作的預備知識

● spideR 的一些小範例

● spideR 的架構

● spideR 的寫作流程

● spideR 的一些小技巧

Page 5: 20130325 mldm monday spide r

本次演講適合初學者請各位高手們忍耐一下囉!

Page 6: 20130325 mldm monday spide r

預備知識

Page 7: 20130325 mldm monday spide r

spideR 寫作的預備知識

● 什麼是網站?● 網站的結構?● 網址的祕密?● 網站資料的種類?● 分析的工具

Page 8: 20130325 mldm monday spide r

什麼是網站?

Page 10: 20130325 mldm monday spide r

設計師眼中的網站

Page 11: 20130325 mldm monday spide r

工程師眼中的網站

Page 12: 20130325 mldm monday spide r

那... spideR 眼中的網站呢?

Page 13: 20130325 mldm monday spide r

網站的結構?

Page 14: 20130325 mldm monday spide r

網站的結構 (分類)

● 前端 V.S. 後端

● Model + View + Controler (MVC)

● Static V.S. Dynamic (Ajax)

Page 15: 20130325 mldm monday spide r

MVC結構

Page 17: 20130325 mldm monday spide r

網址的祕密?

Page 19: 20130325 mldm monday spide r

網址的祕密

● URL 中帶有規則

○ 有些網址會把訊息藏在 URL 中○ 然後,在由後端的 URL Dispatcher 解析

● URL 中帶有規則的範例:

○ http://tw.stock.yahoo.com/d/s/major_2451.html

○ URL規則: major_StockID.html

Page 20: 20130325 mldm monday spide r

網站資料的種類?

Page 21: 20130325 mldm monday spide r

網站資料的種類?

● Page (HTML)● Data (JSON/XML...) ● File

Page 22: 20130325 mldm monday spide r

網站資料 Data (JSON/XML...)

Page 24: 20130325 mldm monday spide r

常用的工具

Page 25: 20130325 mldm monday spide r

常用的工具

● Google Chrome○ Developer Tools

● Firefox○ Firebug○ Hackbar○ Cookie Manager+

● cURL● Wireshark

Page 26: 20130325 mldm monday spide r

一些小範例

Page 28: 20130325 mldm monday spide r

使用技術

● Example1_Extract_TWSE_Stock_IDs.R● R○ XML::htmlParse○ XML::readHTMLTable○ charToRaw○ gsub

● Reference:○ [共筆Blog] 去除 " " 的方法

○ R 的 regular expresssion 講義

Page 29: 20130325 mldm monday spide r

[Example2] 抓取大戶進出:

Page 30: 20130325 mldm monday spide r

使用技術

● Example2_Extract_Stock_Major_Data_Fom_Kimo.R

● R○ XML::htmlParse○ XML::readHTMLTable

Page 31: 20130325 mldm monday spide r

回家作業:

● 綜合前兩個範例:

○ 抓取全部代碼的 ID○ 抓取 OTC 的資料

■ Hint: OTC_IDs○ 將所不同 ID 的 Data Table 用不同名稱命名

■ Hint1: 可以讓函數 output Data Table■ Hint2: 也可以用 assign 函數

○ 在 Data Table 中使用一個新欄位來存 ID ===> 建立總表

○ 在 Data Table 中使用一個新欄位來存日期

Page 32: 20130325 mldm monday spide r

[Example3] 抓取0050代碼:

Page 33: 20130325 mldm monday spide r

使用技術

● Example3_Extract_0050_IDs.R● R○ XML::htmlParse○ XPath Parser in XML

● Reference:○ http://www.w3.org/TR/xpath/

Page 34: 20130325 mldm monday spide r

[Example4] 利用 ID 搭配 quantmod:

Page 35: 20130325 mldm monday spide r

使用技術● Example4_Get_Stock_Data_From_Yahoo

Finance.R● R○ quantmod::getSymbols○ quantmod::chartSeries○ get○ assign

● Reference:○ Quantmod Web○ Quantmod Slide

Page 37: 20130325 mldm monday spide r

回家作業:

● 可以利用 R 中的 rjson 套件,練習處理看看賞面的網頁?

● Reference:○ rjson: http://cran.r-project.

org/web/packages/rjson/rjson.pdf

Page 39: 20130325 mldm monday spide r

使用技術● Example6_Download_CSV_File_From_T

WSE.R● R○ RCurl::getURL○ file■ writeLines■ readLines

○ textConnection○ read.table

Page 40: 20130325 mldm monday spide r

回家作業:

● 接續上方範例......○ 運用 apply 對每一行都 parse 開○ 利用長度去掉不要的資料

○ 把留下的資料運用 do.call(rbind, data_list) 合成

○ 然後,製作成Data frame格式並存入 RData 檔案之中

Page 41: 20130325 mldm monday spide r

[Example7] 看code學寫code

Page 42: 20130325 mldm monday spide r

[Example7] 下載zip檔

Page 43: 20130325 mldm monday spide r

使用技術

● Example7_Download_ZIP_File_From_Taifex.R

● R○ download.file○ unzip

Page 44: 20130325 mldm monday spide r

[Example8] 當遇需要 Cookie 時

Page 45: 20130325 mldm monday spide r

使用技術

● Example8_Download_CSV_File_From_Taifex_With_Cookie.R

● R○ RCurl::getCurlHandle○ RCurl::getURL(url,curl=curlHandle)○ XML::htmlParse○ XML::xmlAttrs

Page 46: 20130325 mldm monday spide r

回家作業:

● 接續上方範例......○ 練習用 readline 讀入 unzip 出來的 rpt 檔○ 並將 rpt 檔轉換成 quantmod 可以分析用

的 xts 格式

Page 47: 20130325 mldm monday spide r

spideR 的架構

Page 48: 20130325 mldm monday spide r

spideR 的架構

● Web Connector○ RCurl

● Data Parser (Cleaner)○ XML

● Data Center○ RData File○ DB (SQLite, MySQL, PostgreSQL,

MongoDB, Redis, ........)

Page 49: 20130325 mldm monday spide r

spideR 的寫作流程

Page 50: 20130325 mldm monday spide r

spideR 的寫作流程

● 確立目標?● 觀察網頁

● 頁面分類

● 分類頁面的 Connector 實作

● 分類頁面的 Parser 實作

● 資料庫比對與存取

Page 51: 20130325 mldm monday spide r

一些小技巧

Page 52: 20130325 mldm monday spide r

尋找「後台」的小技巧1 -- 監控

Page 53: 20130325 mldm monday spide r

尋找「後台」的小技巧2 -- 找form

Page 54: 20130325 mldm monday spide r

尋找「資料」的小技巧1 打開 hidden

Page 57: 20130325 mldm monday spide r

尋找「資料」的小技巧4停用 JS (停用前)

Page 58: 20130325 mldm monday spide r

尋找「資料」的小技巧4停用 JS (停用後:推薦商品消失)

Page 59: 20130325 mldm monday spide r

Q & A

Page 60: 20130325 mldm monday spide r

感謝大家