20130325 MLDM Monday  R 上的 spideR 寫作軍火庫        by c3h3 
TW useR Group & MLDM Monday●   http://www.meetup.com/Taiwan-useR-Group/●   http://www.facebook.com/TaiwanUseRGroup/●   htt...
關於講者●   Chia-Chi Chang (c3h3)●   Chief of Data Scientist of InnovoTECH●   TW useR Group / MLDM Monday 創辦人    之一●   R 、Pyth...
講題大綱●   spideR   寫作的預備知識●   spideR   的一些小範例●   spideR   的架構●   spideR   的寫作流程●   spideR   的一些小技巧
本次演講適合初學者請各位高手們忍耐一下囉!
預備知識
spideR 寫作的預備知識●   什麼是網站?●   網站的結構?●   網址的祕密?●   網站資料的種類?●   分析的工具
什麼是網站?
一般人眼中的網站
設計師眼中的網站
工程師眼中的網站
那... spideR 眼中的網站呢?
網站的結構?
網站的結構 (分類)●   前端 V.S. 後端●   Model + View + Controler    (MVC)●   Static V.S. Dynamic (Ajax)
MVC結構
Static V.S. Dynamic (Ajax)●   範例:●   [Ajax] http://shop.    myer.com.    au/shop/mystore/9    73607510●   [Static] http://...
網址的祕密?
網址的祕密● URL?var_1=val_1&var_2=val_2...  ○ 其實,就像呼叫函數一樣  ○ 相關訊息可在 form 中或 JS code 中找到  ○ http://finance.yahoo.com/q/hp?s=%   ...
網址的祕密● URL 中帶有規則  ○ 有些網址會把訊息藏在 URL 中  ○ 然後,在由後端的 URL Dispatcher 解析● URL 中帶有規則的範例:  ○ http://tw.stock.yahoo.    com/d/s/maj...
網站資料的種類?
網站資料的種類?● Page (HTML)● Data (JSON/XML...)● File
網站資料 Data (JSON/XML...)
網站資料 File
常用的工具
常用的工具● Google Chrome  ○ Developer Tools● Firefox  ○ Firebug  ○ Hackbar  ○ Cookie Manager+● cURL● Wireshark
一些小範例
[Example1] 抓股票代碼:
使用技術● Example1_Extract_TWSE_Stock_IDs.R● R  ○ XML::htmlParse  ○ XML::readHTMLTable  ○ charToRaw  ○ gsub● Reference:  ○ [共筆...
[Example2] 抓取大戶進出:
使用技術● Example2_Extract_Stock_Major_Data_  Fom_Kimo.R● R  ○ XML::htmlParse  ○ XML::readHTMLTable
回家作業:● 綜合前兩個範例:  ○ 抓取全部代碼的 ID  ○ 抓取 OTC 的資料    ■ Hint: OTC_IDs  ○ 將所不同 ID 的 Data Table 用不同名稱命名    ■ Hint1: 可以讓函數 output Da...
[Example3] 抓取0050代碼:
使用技術● Example3_Extract_0050_IDs.R● R  ○ XML::htmlParse  ○ XPath Parser in XML● Reference:  ○ http://www.w3.org/TR/xpath/
[Example4] 利用 ID 搭配quantmod:
使用技術● Example4_Get_Stock_Data_From_Yahoo  Finance.R● R  ○ quantmod::getSymbols  ○ quantmod::chartSeries  ○ get  ○ assign● ...
[Example5] 找到後台的JSON時?
回家作業:● 可以利用 R 中的 rjson 套件,練習處理看看  賞面的網頁?● Reference:  ○ rjson: http://cran.r-project.    org/web/packages/rjson/rjson.pdf
[Example6] 當遇到下載檔案時
使用技術● Example6_Download_CSV_File_From_T  WSE.R● R  ○ RCurl::getURL  ○ file    ■ writeLines    ■ readLines  ○ textConnectio...
回家作業:● 接續上方範例......  ○ 運用 apply 對每一行都 parse 開  ○ 利用長度去掉不要的資料  ○ 把留下的資料運用 do.call(rbind,    data_list) 合成  ○ 然後,製作成Data fra...
[Example7] 看code學寫code
[Example7] 下載zip檔
使用技術● Example7_Download_ZIP_File_From_Tai  fex.R● R  ○ download.file  ○ unzip
[Example8] 當遇需要 Cookie 時
使用技術● Example8_Download_CSV_File_From_Tai  fex_With_Cookie.R● R  ○   RCurl::getCurlHandle  ○   RCurl::getURL(url,curl=curl...
回家作業:● 接續上方範例......  ○ 練習用 readline 讀入 unzip 出來的 rpt 檔  ○ 並將 rpt 檔轉換成 quantmod 可以分析用    的 xts 格式
spideR 的架構
spideR 的架構● Web Connector  ○ RCurl● Data Parser (Cleaner)  ○ XML● Data Center    ○ RData File    ○ DB (SQLite, MySQL, Post...
spideR 的寫作流程
spideR 的寫作流程●   確立目標?●   觀察網頁●   頁面分類●   分類頁面的 Connector 實作●   分類頁面的 Parser 實作●   資料庫比對與存取
一些小技巧
尋找「後台」的小技巧1 -- 監控
尋找「後台」的小技巧2 -- 找form
尋找「資料」的小技巧1  打開 hidden
尋找「資料」的小技巧2  利用JQuery
尋找「資料」的小技巧3 利用 JS debugger;
尋找「資料」的小技巧4 停用 JS (停用前)
尋找「資料」的小技巧4停用 JS (停用後:推薦商品消失)
Q&A
感謝大家
Upcoming SlideShare
Loading in …5
×

20130325 mldm monday spide r

1,210 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,210
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
14
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

20130325 mldm monday spide r

  1. 1. 20130325 MLDM Monday R 上的 spideR 寫作軍火庫 by c3h3 
  2. 2. 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/
  3. 3. 關於講者● Chia-Chi Chang (c3h3)● Chief of Data Scientist of InnovoTECH● TW useR Group / MLDM Monday 創辦人 之一● R 、Python 和 Maple 的愛用者● 平時喜歡分析各種類型的資料、買賣金融商 品;另外,也喜歡閱讀各種數學理論、模型、以 及它們的應用......
  4. 4. 講題大綱● spideR 寫作的預備知識● spideR 的一些小範例● spideR 的架構● spideR 的寫作流程● spideR 的一些小技巧
  5. 5. 本次演講適合初學者請各位高手們忍耐一下囉!
  6. 6. 預備知識
  7. 7. spideR 寫作的預備知識● 什麼是網站?● 網站的結構?● 網址的祕密?● 網站資料的種類?● 分析的工具
  8. 8. 什麼是網站?
  9. 9. 一般人眼中的網站
  10. 10. 設計師眼中的網站
  11. 11. 工程師眼中的網站
  12. 12. 那... spideR 眼中的網站呢?
  13. 13. 網站的結構?
  14. 14. 網站的結構 (分類)● 前端 V.S. 後端● Model + View + Controler (MVC)● Static V.S. Dynamic (Ajax)
  15. 15. MVC結構
  16. 16. Static V.S. Dynamic (Ajax)● 範例:● [Ajax] http://shop. myer.com. au/shop/mystore/9 73607510● [Static] http://tw. stock.yahoo. com/d/s/major_24 51.html
  17. 17. 網址的祕密?
  18. 18. 網址的祕密● URL?var_1=val_1&var_2=val_2... ○ 其實,就像呼叫函數一樣 ○ 相關訊息可在 form 中或 JS code 中找到 ○ http://finance.yahoo.com/q/hp?s=% 5ETWII&a=06&b=2&c=1997&d=02&e=24&f=2013&g=d ○ http://www.taifex.com.tw/eng/eng3/eng3_2dl.asp? COMMODITY_ID=all&DATA_DATE=2012/11/01&DATA_D ATE1=2012/11/15
  19. 19. 網址的祕密● URL 中帶有規則 ○ 有些網址會把訊息藏在 URL 中 ○ 然後,在由後端的 URL Dispatcher 解析● URL 中帶有規則的範例: ○ http://tw.stock.yahoo. com/d/s/major_2451.html ○ URL規則: major_StockID.html
  20. 20. 網站資料的種類?
  21. 21. 網站資料的種類?● Page (HTML)● Data (JSON/XML...)● File
  22. 22. 網站資料 Data (JSON/XML...)
  23. 23. 網站資料 File
  24. 24. 常用的工具
  25. 25. 常用的工具● Google Chrome ○ Developer Tools● Firefox ○ Firebug ○ Hackbar ○ Cookie Manager+● cURL● Wireshark
  26. 26. 一些小範例
  27. 27. [Example1] 抓股票代碼:
  28. 28. 使用技術● Example1_Extract_TWSE_Stock_IDs.R● R ○ XML::htmlParse ○ XML::readHTMLTable ○ charToRaw ○ gsub● Reference: ○ [共筆Blog] 去除 " " 的方法 ○ R 的 regular expresssion 講義
  29. 29. [Example2] 抓取大戶進出:
  30. 30. 使用技術● Example2_Extract_Stock_Major_Data_ Fom_Kimo.R● R ○ XML::htmlParse ○ XML::readHTMLTable
  31. 31. 回家作業:● 綜合前兩個範例: ○ 抓取全部代碼的 ID ○ 抓取 OTC 的資料 ■ Hint: OTC_IDs ○ 將所不同 ID 的 Data Table 用不同名稱命名 ■ Hint1: 可以讓函數 output Data Table ■ Hint2: 也可以用 assign 函數 ○ 在 Data Table 中使用一個新欄位來存 ID ===> 建 立總表 ○ 在 Data Table 中使用一個新欄位來存日期
  32. 32. [Example3] 抓取0050代碼:
  33. 33. 使用技術● Example3_Extract_0050_IDs.R● R ○ XML::htmlParse ○ XPath Parser in XML● Reference: ○ http://www.w3.org/TR/xpath/
  34. 34. [Example4] 利用 ID 搭配quantmod:
  35. 35. 使用技術● Example4_Get_Stock_Data_From_Yahoo Finance.R● R ○ quantmod::getSymbols ○ quantmod::chartSeries ○ get ○ assign● Reference: ○ Quantmod Web ○ Quantmod Slide
  36. 36. [Example5] 找到後台的JSON時?
  37. 37. 回家作業:● 可以利用 R 中的 rjson 套件,練習處理看看 賞面的網頁?● Reference: ○ rjson: http://cran.r-project. org/web/packages/rjson/rjson.pdf
  38. 38. [Example6] 當遇到下載檔案時
  39. 39. 使用技術● Example6_Download_CSV_File_From_T WSE.R● R ○ RCurl::getURL ○ file ■ writeLines ■ readLines ○ textConnection ○ read.table
  40. 40. 回家作業:● 接續上方範例...... ○ 運用 apply 對每一行都 parse 開 ○ 利用長度去掉不要的資料 ○ 把留下的資料運用 do.call(rbind, data_list) 合成 ○ 然後,製作成Data frame格式並存入 RData 檔案之中
  41. 41. [Example7] 看code學寫code
  42. 42. [Example7] 下載zip檔
  43. 43. 使用技術● Example7_Download_ZIP_File_From_Tai fex.R● R ○ download.file ○ unzip
  44. 44. [Example8] 當遇需要 Cookie 時
  45. 45. 使用技術● Example8_Download_CSV_File_From_Tai fex_With_Cookie.R● R ○ RCurl::getCurlHandle ○ RCurl::getURL(url,curl=curlHandle) ○ XML::htmlParse ○ XML::xmlAttrs
  46. 46. 回家作業:● 接續上方範例...... ○ 練習用 readline 讀入 unzip 出來的 rpt 檔 ○ 並將 rpt 檔轉換成 quantmod 可以分析用 的 xts 格式
  47. 47. spideR 的架構
  48. 48. spideR 的架構● Web Connector ○ RCurl● Data Parser (Cleaner) ○ XML● Data Center ○ RData File ○ DB (SQLite, MySQL, PostgreSQL,
  49. 49. spideR 的寫作流程
  50. 50. spideR 的寫作流程● 確立目標?● 觀察網頁● 頁面分類● 分類頁面的 Connector 實作● 分類頁面的 Parser 實作● 資料庫比對與存取
  51. 51. 一些小技巧
  52. 52. 尋找「後台」的小技巧1 -- 監控
  53. 53. 尋找「後台」的小技巧2 -- 找form
  54. 54. 尋找「資料」的小技巧1 打開 hidden
  55. 55. 尋找「資料」的小技巧2 利用JQuery
  56. 56. 尋找「資料」的小技巧3 利用 JS debugger;
  57. 57. 尋找「資料」的小技巧4 停用 JS (停用前)
  58. 58. 尋找「資料」的小技巧4停用 JS (停用後:推薦商品消失)
  59. 59. Q&A
  60. 60. 感謝大家

×