Re: [問題] 零基礎的網頁Parse?

作者: celestialgod (天)   2016-06-07 23:38:17
※ 引述《Edster (Edster)》之銘言:
: [問題類型]:
:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
:
: [軟體熟悉度]:
: 請把以下不需要的部份刪除
: 使用者(已經有用R 做過不少作品)
: [問題敘述]:
: 請簡略描述你所要做的事情,或是這個程式的目的
: 我想要將一個網站的表格擷取下來
: http://goo.gl/S5P7yO
: http://goo.gl/pyMNCe
: 過去我在R的經驗都是讀純文字及或是空間資料.
: 盲試了兩天,網路教學包含本版上面的文章都看了。
: 但是一來對html格式的不瞭解,讀進來之後要一層層拆解搞得我有點難懂。
: 中間測試了package包括 XML, xml2, 還有版主C大前幾天示範的httr + xml2
: 我只要抓365日的觀測數值,中文字和下面的統計值都不用。
: 目前的進度如範例,研究了一天半不知如何把這堆格式代碼去除。
: 請問可否給點提示。
: [程式範例]:
:
: ## method1
: f = "http://goo.gl/S5P7y"
: a = htmlParse(f, encoding = "big5")
: b = getNodeSet(a, path="//body/div")
: c = getNodeSet(b[[2]], path="//tr")
: d = c[[5]]
: ## method2
: tableContent <-
: GET(f) %>>% content("text", encoding = "BIG5") %>% read_html("BIG5")
: tableContent %<>% xml_find_all("//body/div/div")
: xml_structure(tableContent[[2]])
: tableContent <- tableContent[[2]] %>% xml_find_all(., "//tr") %>% xml_text(.)
: tableContent[[5]]
: [環境敘述]:
:
: R: 3.3.0
: Rstudio: 0.99.902
: OS: Win 10
:
: [關鍵字]:
:
: XML, xml2, httr.
:
新手建議先去R翻轉教室把XML那一節跑過一輪
library(httr)
library(pipeR)
library(xml2)
library(stringi)
library(stringr)
library(plyr)
url <- "http://gweb.wra.gov.tw/ebooks/ebook/hyb2000/1140H058.htm"
tableContent <- GET(url) %>>% content("text", encoding = "BIG5") %>>%
str_replace_all("&nbsp;", "") %>>% read_html %>>%
xml_find_all("//div[@class='Section1']/div/table") # 抓出所有表格
# 只要第二張表格,去掉統計量,並把空欄位跟*換成NA
fullTable <- tableContent[[2]] %>>% xml_find_all("tr") %>>%
lapply(function(node){
xml_find_all(node, "td") %>>% xml_text %>>%
stri_conv(from = "UTF-8", to = "Big5")
}) %>>% do.call(what = rbind)
outputTable <- matrix(fullTable[2:32, 2:13] %>>%
mapvalues(c("", "*"), c(NA, NA)) %>>% as.numeric, 31, 12, FALSE,
dimnames = list(fullTable[2:32, 1], fullTable[1, 2:13]))
參考一下吧
後來在FB社團看到有人用setlocale解決了rvest的問題:
http://pastebin.com/3hb1t0JZ
作者: Edster (Edster)   2016-06-08 08:19:00
我的code果然錯很多,我再想想為什麼要@class='Section1'
作者: obarisk (OSWALT)   2016-06-08 19:58:00
還是要讀一下xpath才是根本之道

Links booklink

Contact Us: admin [ a t ] ucptt.com