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