Problem:
本篇文章討論如何使用R下載網頁的表格資料, 再進行後續處理.
Analysis:
# part 1 設定R語系為C, 以配合中文編碼使用
本例考量 RWEPA 個人簡介(About) 網頁 (http://web.ydu.edu.tw/~alan9956/02person.htm), 該網頁包括專題演講表格, 該表格包括編號,日期,主題,單位/地點,時數等5個欄位, 在R環境中, 可使用 XML 套件的 readHTMLTable 函數讀取網頁表格, 另因中文編碼考量, 先設定 locate, R程式如下:
Sys.setlocale(category="LC_ALL", locale="C")
Sys.getlocale()
# part 2 載入套件,讀取網頁資料
準備使用 XML 套件的 readHTMLTable 函數, 使用時記得加上 encoding="big5", 結果有5個表格, 其中第1個表格是使用的資料集, 因此將 tmp串列的第1個元素取出, 設定 train <- tmp[[1]], R程式如下:
library(XML) # readHTMLTable 函數
# IE: F12 --> line 7: <meta http-equiv=Content-Type content="text/html; charset=big5">
# 觀察原始網頁採用 big5, 因此encoding參數設定為 big5
urls <- "http://web.ydu.edu.tw/~alan9956/02person.htm"
tmp <- readHTMLTable(urls, stringsAsFactors = FALSE, encoding="big5")
length(tmp) # length=5
train <- tmp[[1]] # 139*5
# part 3 資料整理
train[1,2] # 顯示亂碼
iconv(train[1,2], "UTF-8", "BIG-5") # 顯示正常
# 中文編碼轉換
train <- as.data.frame(lapply(train, function(x) iconv(x, "UTF-8", "BIG-5")))
names(train) <- c("id", "traindate", "program", "location", "hours")
head(train)
# 匯出資料
write.table(train, file="C:/rdata/train.txt", row.names=FALSE)
# save(train, file="C:/rdata/train.RData") # 亦可儲存成 RData 格式
# R程式:
# title: RWEPA - 讀取網頁表格教育訓練
# date: 2016.9.16
# part 1 設定R語系為C, 以配合中文編碼使用
Sys.setlocale(category="LC_ALL", locale="C")
Sys.getlocale()
# part 2 載入套件,讀取網頁資料
library(XML) # readHTMLTable 函數
# IE: F12 --> line 7: <meta http-equiv=Content-Type content="text/html; charset=big5">
# 觀察原始網頁採用 big5, 因此encoding參數設定為 big5
urls <- "http://web.ydu.edu.tw/~alan9956/02person.htm"
tmp <- readHTMLTable(urls, stringsAsFactors = FALSE, encoding="big5")
length(tmp) # length=5
train <- tmp[[1]] # 139*5
# part 3 資料整理
train[1,2] # 顯示亂碼
iconv(train[1,2], "UTF-8", "BIG-5") # 顯示正常
# 中文編碼轉換
train <- as.data.frame(lapply(train, function(x) iconv(x, "UTF-8", "BIG-5")))
names(train) <- c("id", "traindate", "program", "location", "hours")
head(train)
# 匯出資料
write.table(train, file="C:/rdata/train.txt", row.names=FALSE)
# save(train, file="C:/rdata/train.RData") # 亦可儲存成 RData 格式
R程式執行結果:
# end