Re: [問題] 相關爬蟲問題

看板R_Language作者 (蕭)時間8年前 (2017/06/07 08:49), 編輯推噓0(003)
留言3則, 1人參與, 最新討論串3/4 (看更多)
來分享一下我的程式碼 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 (蕭)》之銘言: : ※ 引述《jack155861 (蕭)》之銘言: : : [問題類型]: : : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : : [軟體熟悉度]: : : 使用者(已經有用R 做過不少作品) : : [問題敘述]: : : 之前爬蟲都是用html網頁型態,最近遇到一個是需要先點選選單才能查詢資料的ASP網頁, : : 如下 : : http://fhy.wra.gov.tw/ReservoirPage_2011/StorageCapacity.aspx : : 假設我要載:水庫>2017/6/4 像這樣的資料時,他的網址並不會跟著變動 : : 要使用怎樣的語法會比較恰當 : : 請各位指點一下~"~ : 各位好 : 謝謝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), 來自: 60.251.160.121 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1496796579.A.2FB.html

06/07 08:53, , 1F
如果有更好的寫法 也可以提出阿
06/07 08:53, 1F

06/07 08:55, , 2F
補充一點為何需要viewstate 因為每一天的viewstate不Y
06/07 08:55, 2F

06/07 08:56, , 3F
同,而其他的都相同 所有我就沒有放進去了
06/07 08:56, 3F
文章代碼(AID): #1PDqsZBx (R_Language)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 3 之 4 篇):
文章代碼(AID): #1PDqsZBx (R_Language)