R_Language 板


LINE

建議不要用XML,其實你很多程式是可以省下來不用的 用foreach,日後要改平行也可以比較簡單更動 好讀版:https://pastebin.com/xhCkV0Cd library(data.table) library(stringi) library(lubridate) library(foreach) library(httr) library(xml2) library(rvest) library(pipeR) # windows才需要先把locale改成C,並用stringi::stri_conv轉成big5 backupLocale <- Sys.getlocale("LC_COLLATE") Sys.setlocale("LC_ALL", 'C') timeVec <- seq(ymd("2003/01/01"), ymd("2003/01/11"), 1) reservoirUrl <- "http://fhy.wra.gov.tw/ReservoirPage_2011/StorageCapacity.aspx" tmp <- foreach(time = timeVec, .final = rbindlist) %do% { VIEWSTATE <- GET(reservoirUrl) %>>% content %>>% xml_find_all("//input[@name='__VIEWSTATE']") %>>% xml_attr("value") postBody <- c(list("所有水庫"), lapply(c(year, month, day), function(f) f(time)), list(VIEWSTATE)) %>>% `names<-`(c(paste0("ctl00$cphMain$", c("cboSearch", paste0("ucDate$cbo", c("Year", "Month","Day")))), "__VIEWSTATE")) outTbl <- POST(reservoirUrl, body = postBody) %>>% content %>>% xml_find_first("//table[@id='ctl00_cphMain_gvList']") %>>% html_table(fill = TRUE) %>>% setDT %>>% `[`(j = lapply(.SD, stri_conv, from = "UTF-8", to = "Big5")) setnames(outTbl, stri_conv(names(outTbl), "UTF-8", "Big5")) fwrite(outTbl, sprintf("result/%s.csv", as.character(time))) return(NULL) } Sys.setlocale(locale = backupLocale) fwrite(rbindlist(lapply(list.files("result", "\\.csv$"), fread)), "merge.csv") ※ 引述《jack155861 (蕭)》之銘言: : 來分享一下我的程式碼 : library(magrittr) : library(httr) : library(rvest) : library(XML) : library(dplyr) : library(stringr) : setwd("J:/聖哲/資料運算/spider") : data<-read.csv("test.csv", header=T, sep=",") : #http://imgur.com/a/vpizi 我自己先用EXCEL創造出要載的年月日 這用R也可以做啦 : #只是這個EXCEL之後還有其他功能 : for (a in 1:length(data[,1])) : { : url="http://fhy.wra.gov.tw/ReservoirPage_2011/StorageCapacity.aspx" : txt=GET(url) : viewstate = txt %>% read_html() %>% html_nodes(., css="#__VIEWSTATE") %>% : html_attr("value") : #讀取viewstate : cboSearch="所有水庫" : cboYear=data[a,2] : cboMonth=data[a,3] : cboDay=data[a,4] : #我的參數 : dados <- list( 'ctl00$cphMain$cboSearch'=cboSearch, : 'ctl00$cphMain$ucDate$cboYear'=cboYear, : 'ctl00$cphMain$ucDate$cboMonth'=cboMonth, : 'ctl00$cphMain$ucDate$cboDay'=cboDay, : '__VIEWSTATE'=viewstate) : #此網頁有很多$ list裡面不能直接打$ 要有單引號就沒這問題 : r <- POST(url, body=dados, cookies=unlist(txt$cookies),encode = "form") : res_text <- content(r, "text", encoding = "UTF-8") %>% : `Encoding<-`("UTF-8") # Windows encodind issue : res_text : #看看資料有無出來 : htmlParse(res_text,encoding = "utf8") : tables <- readHTMLTable(htmlParse(res_text,encoding = : "utf8"),stringsAsFactors=FALSE) : View(tables[[1]]) : #看看TABLE出來的資料有無正確 其實有些有跳欄位問題 但資料都有 : name=tables[[1]][-1,1] : water_day=tables[[1]][-1,2] : time_day=paste(cboYear,"-",cboMonth,"-",cboDay,sep = "") : rain=tables[[1]][-1,4] : input=tables[[1]][-1,5] : output=tables[[1]][-1,6] : difference=tables[[1]][-1,7] : time_now=tables[[1]][-1,8] : height_now=tables[[1]][-1,9] : water_now=tables[[1]][-1,10] : water_percent_now=tables[[1]][-1,11] : result=cbind(name,water_day,time_day,rain,input,output,difference,time_now,height_now,water_now,water_percent_now) : colnames(result) <- c("水庫名稱","水庫基本數據_有效容量", : "每日蓄水統計_統計時間","每日蓄水統計_集水區降雨量", : "每日蓄水統計_進水量","每日蓄水統計_出水量", : "每日蓄水統計_與昨日水位差","即時水情資料_水情時間", : "即時水情資料_水位","即時水情資料_有效蓄水量", : "即時水情資料_蓄水量百分比") : #從table存取我要的資訊 : write.csv(result, paste("./result/",time_day,".CSV",sep = "")) : #每一天一個CSV檔案 之後可能需要 故先不做合併 : } : a = list.files("result") : dir = paste("./result/",a,sep="") : n = length(dir) : merge.data = read.csv(file = dir[1],header=T,sep=",")[-54,-1] : for (i in 2:n){ : new.data = read.csv(file = dir[i], header=T, sep=",")[-54,-1] : merge.data = rbind(merge.data,new.data) : } : write.csv(merge.data,file = "./merge.csv",row.names=F) : #所有CSV合併成為一個檔案 : ※ 引述《jack155861 (蕭)》之銘言: : : 各位好 : : 謝謝C大的說明 然後我又在網路上看到一個教學 他這個教學跟我網站的形式有點類似 : : 網址如下:http://leoluyi.logdown.com/posts/406397-crawler-mops-2 : : 我把我要爬蟲的網站 看了他的程式碼 他是屬於form data 如下圖 : : http://imgur.com/a/Vy7mw : : 依照上面教學網址是要把form data的資料都放到R的函數理頭 : : res <- POST( : : "http://fhy.wra.gov.tw/ReservoirPage_2011/StorageCapacity.aspx", : : body = "XXXXX", : : encode = "form") : : 但是怎樣跑都跑不出來 跑的都是最新(2017/6/4)的資料 : : 若我body只放以下這些有影響的參數也是如此 : : ctl00$cphMain$cboSearch:防汛重點水庫 : : ctl00$cphMain$ucDate$cboYear:2017 : : ctl00$cphMain$ucDate$cboMonth:6 : : ctl00$cphMain$ucDate$cboDay:2 : : 請問各位大大 有哪裡用錯了嗎? --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.233.49.200
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1496837550.A.2F5.html
1F:→ Wush978: 最近我用xml2編輯html文件,結果會爆炸 06/08 00:22
2F:→ Wush978: 所以最後重回XML的懷抱... 06/08 00:22
是喔@@ 第一次聽到XD
3F:推 jack155861: 回去參拜~"~ 06/08 02:19
4F:推 Edster: 大大, 好像都只有今天的... 06/09 18:45
5F:推 Edster: postbody name改成 c("cboYear", "cboMonth", "cboDay") 06/09 19:02
6F:推 Edster: 我來試試搞成小時的(已經手動抓了 -.-).. 06/09 19:20
已更正 ※ 編輯: celestialgod (36.234.176.55), 06/09/2017 21:17:49
7F:推 Edster: 小時的在這邊, 前面都一樣 /Statistics.aspx 縮不了網址 06/10 00:14
8F:→ Edster: 搞了兩個多小時, table內有無效的超連結, 試不成功. 06/10 00:15
9F:推 Edster: 小時尺度原網頁 http://bit.ly/2r3skUr 06/10 02:19
10F:推 Edster: 搞定 https://pastebin.com/2t842ppp 06/10 11:41
11F:→ Edster: 各種不熟悉. 各種以為可以結果失敗 06/10 11:43







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP