[問題] 抓取氣象局網頁資料

看板R_Language作者 (可羅)時間9年前 (2016/05/02 09:40), 9年前編輯推噓0(0015)
留言15則, 3人參與, 最新討論串1/2 (看更多)
ctrl + y 可以刪除一整行,請將不需要的內容刪除 文章分類提示: - 問題: 當你想要問問題時,請使用這個類別 [問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 請把以下不需要的部份刪除 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 想擷取 http://www.cwb.gov.tw/V7/climate/monthlyData/mD.htm 天氣資料,但由於天氣的資料會依網頁上所選取的下拉式選單的值而有所變化 想請問各位先進,要如何讓R自動會帶值選取對應的資料? 例如: 2013年3月阿里山的平均溫度為9.9度 2013年4月阿里山的平均溫度為11.3度 謝謝 [環境敘述]: 請提供 sessionInfo() 的輸出結果, 裡面含有所有你使用的作業系統、R 的版本和套件版本資訊, 讓版友更容易找出錯誤 R version 3.2.4 Revised (2016-03-16 r70336) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 7 x64 (build 7601) Service Pack 1 locale: [1] LC_COLLATE=Chinese (Traditional)_Taiwan.950 LC_CTYPE=Chinese (Traditional)_Taiwan.950 LC_MONETARY=Chinese (Traditional)_Taiwan.950 [4] LC_NUMERIC=C LC_TIME=Chinese (Traditional)_Taiwan.950 attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] httr_1.1.0 magrittr_1.5 R6_2.1.1 tools_3.2.4 RCurl_1.95-4.8 yaml_2.1.13 rappdirs_0.3 memoise_0.2.1 crayon_1.3.1 swirl_2.3.1-2 [11] stringi_1.0-1 stringr_1.0.0 digest_0.6.8 testthat_0.11.0 bitops_1.0-6 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.168.242.6 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1462153221.A.953.html ※ 編輯: corel (1.168.242.6), 05/02/2016 09:41:09

05/02 10:56, , 1F
其實它只是靠iframe在呼叫不同的靜態網頁而已。
05/02 10:56, 1F

05/02 10:58, , 2F
你仔細看原始碼就可發現呼叫的靜態網頁網址及規則。
05/02 10:58, 2F

05/02 10:58, , 3F
例如 ./Data/mD20161.htm 就是 2016 一月。
05/02 10:58, 3F

05/02 11:17, , 4F
感謝,原來還有這一個方法,剛剛還在研究RSelenium解法
05/02 11:17, 4F

05/02 11:54, , 5F
中央氣象局非常多的網頁資料都用類似方法(選單控制
05/02 11:54, 5F

05/02 11:55, , 6F
iframe對象而iframe內是可直接讀取的靜態html)。
05/02 11:55, 6F

05/02 11:56, , 7F
之前練習颱風和地震的歷史記錄,都可以這樣搞。
05/02 11:56, 7F

05/02 11:57, , 8F
本來我很恨iframe的,不過這種情況的iframe就很可愛了:)
05/02 11:57, 8F
目前就依 andrew43大大 建議用靜態方式去抓取 doc <- htmlParse("http://www.cwb.gov.tw/V7/climate/monthlyData/Data/mD201512.htm") tableNodes <- getNodeSet(doc, "//table") tb <- readHTMLTable(tableNodes[[2]]) 資料的確是讀取下來了 但請教如何把每一筆 row 值各別儲存出來? 例如: 阿里山, 9.8, 18.0/5 .... 等 謝謝 ※ 編輯: corel (1.168.242.6), 05/02/2016 12:16:33 ※ 編輯: corel (1.168.242.6), 05/02/2016 12:22:29

05/02 13:35, , 9F
tb 已經是 data.frame 了,就 tb[第幾列, 第幾欄] 這樣
05/02 13:35, 9F

05/02 13:36, , 10F
或 tb[第幾列, ] 取整列而 tb[, 第幾欄] 取整欄
05/02 13:36, 10F

05/02 13:37, , 11F
只是基本的 data frame 取值而已。這是你想問的嗎?
05/02 13:37, 11F
沒錯,不過剛剛我太糾結於 a <- tb[23,1] class(a) 印出來的 class 是 "factor"的問題 只不過我又延伸出另一個問題 home <- "http://www.cwb.gov.tw/V7/climate/monthlyData/mD.htm" home <- htmlParse(home, encoding ="UTF-8") 抓出來是亂碼... 我有查網頁中的語言編碼是 utf-8 可是抓出來就是亂碼? 請問該如何修正,謝謝 ※ 編輯: corel (1.168.242.6), 05/02/2016 14:15:36 ※ 編輯: corel (1.168.242.6), 05/02/2016 14:16:27

05/02 14:20, , 12F
不好意思問題有一點多...
05/02 14:20, 12F

05/02 14:36, , 13F
windows用stri_conv轉到big5顯示才會正常
05/02 14:36, 13F

05/02 15:07, , 14F
factor是因為自動把字串欄轉成因子,但這通常沒關係,
05/02 15:07, 14F

05/02 15:07, , 15F
硬要轉回字串就套 as.character() 就好了。
05/02 15:07, 15F
文章代碼(AID): #1N9h05bJ (R_Language)
文章代碼(AID): #1N9h05bJ (R_Language)