作者corel (可罗)
看板R_Language
标题[问题] 抓取气象局网页资料
时间Mon May 2 09:40:17 2016
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://webptt.com/cn.aspx?n=bbs/R_Language/M.1462153221.A.953.html
※ 编辑: corel (1.168.242.6), 05/02/2016 09:41:09
1F:→ andrew43: 其实它只是靠iframe在呼叫不同的静态网页而已。 05/02 10:56
2F:→ andrew43: 你仔细看原始码就可发现呼叫的静态网页网址及规则。 05/02 10:58
3F:→ andrew43: 例如 ./Data/mD20161.htm 就是 2016 一月。 05/02 10:58
4F:→ corel: 感谢,原来还有这一个方法,刚刚还在研究RSelenium解法 05/02 11:17
5F:→ andrew43: 中央气象局非常多的网页资料都用类似方法(选单控制 05/02 11:54
6F:→ andrew43: iframe对象而iframe内是可直接读取的静态html)。 05/02 11:55
7F:→ andrew43: 之前练习台风和地震的历史记录,都可以这样搞。 05/02 11:56
8F:→ andrew43: 本来我很恨iframe的,不过这种情况的iframe就很可爱了:) 05/02 11:57
目前就依 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
9F:→ andrew43: tb 已经是 data.frame 了,就 tb[第几列, 第几栏] 这样 05/02 13:35
10F:→ andrew43: 或 tb[第几列, ] 取整列而 tb[, 第几栏] 取整栏 05/02 13:36
11F:→ andrew43: 只是基本的 data frame 取值而已。这是你想问的吗? 05/02 13:37
没错,不过刚刚我太纠结於
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
12F:→ corel: 不好意思问题有一点多... 05/02 14:20
13F:→ celestialgod: windows用stri_conv转到big5显示才会正常 05/02 14:36
14F:→ andrew43: factor是因为自动把字串栏转成因子,但这通常没关系, 05/02 15:07
15F:→ andrew43: 硬要转回字串就套 as.character() 就好了。 05/02 15:07