2016年9月16日 星期五

中文網頁表格擷取,亂碼處理

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

1 則留言:

  1. http://web.ydu.edu.tw/~alan9956/02person.htm 網址不再更新, 已取消, 請參考上述R程式說明.

    回覆刪除