library(magrittr)
library(data.table)
library(httr)
library(rvest)
library(XML)
library(stringi)
library(RCurl)
library(stringr)
首先進入表格頁面進行觀察與測試。 選擇「台北地方法院」>房屋>一般程序>全部>查詢,進入到表格頁面的第一頁。
取得 request url 以及 query string parameters,用 ? 將兩者串接在一起,並且刪去空值的參數,得到資料頁面的url
url = "http://aomp.judicial.gov.tw/abbs/wkw/WHD2A03.jsp?"
url= "http://aomp.judicial.gov.tw/abbs/wkw/WHD2A03.jsp?pageTotal=14&saletypeX=1&proptypeX=C52&courtX=TPD&order=odcrm&query_typeX=session&hsimun=all&ctmd=all&sec=all&checkyn=all&emptyyn=all&order=odcrm&pageNow=1&930DA782205AEA0FB8EF2F4CFE8D06F4=DB71E651465196BF6CABD297ED8CDD76"
res <- GET(url)
htmlFile = getURLContent(url)
其中原檔案使用ms590編碼,需要特殊的處理方式
htmlFileEncodingUTF8 = stri_encode(htmlFile, attr(htmlFile, "Content-Type")[2], "utf8")
table = htmlFileEncodingUTF8 %>% XML::readHTMLTable(encoding = "UTF-8")
觀察table的結構,並選取出需要的資料部分
table %>% str()
## List of 7
## $ NULL:'data.frame': 22 obs. of 13 variables:
## ..$ V1 : Factor w/ 19 levels "","[1]\n \n2\n \n3\n \n4\n \n5\n \n6\n \n7\n \n8\n \n9\n \n10\n \n下一頁>\n \n下10頁>>\n \n最後一頁>>",..: 1 1 1 18 3 10 11 12 13 14 ...
## ..$ V2 : Factor w/ 10 levels "","100司執字第123806號\r\n \r\n (洪股)",..: NA 9 8 10 2 2 2 2 2 2 ...
## ..$ V3 : Factor w/ 7 levels "","105/07/12\r\n \r\n\r\n 第1拍",..: NA 1 1 7 2 2 2 2 2 2 ...
## ..$ V4 : Factor w/ 6 levels "臺北市\r\n 松山區",..: NA NA NA 5 2 2 2 2 2 2 ...
## ..$ V5 : Factor w/ 13 levels "房屋地址/樓層面積",..: NA NA NA 1 5 5 6 9 7 7 ...
## ..$ V6 : Factor w/ 7 levels "1,200,000","2,340,000",..: NA NA NA 7 3 3 3 3 3 3 ...
## ..$ V7 : Factor w/ 3 levels "不點交","點交",..: NA NA NA 2 3 3 3 3 3 3 ...
## ..$ V8 : Factor w/ 2 levels "","空屋": NA NA NA 2 1 1 1 1 1 1 ...
## ..$ V9 : Factor w/ 3 levels "","1","標 別": NA NA NA 3 1 1 1 1 1 1 ...
## ..$ V10: Factor w/ 2 levels "","備 註": NA NA NA 2 1 1 1 1 1 1 ...
## ..$ V11: Factor w/ 2 levels "看圖","看照片": NA NA NA 1 2 2 2 2 2 2 ...
## ..$ V12: Factor w/ 2 levels "採通訊投標","否": NA NA NA 1 2 2 2 2 2 2 ...
## ..$ V13: Factor w/ 2 levels "查詢","土地有無遭受污染": NA NA NA 2 1 1 1 1 1 1 ...
## $ NULL:'data.frame': 15 obs. of 13 variables:
## ..$ 筆次 : Factor w/ 15 levels "1","10","11",..: 1 8 9 10 11 12 13 14 15 2 ...
## ..$ 字號
## 股別 : Factor w/ 6 levels "100司執字第123806號\r\n \r\n (洪股)",..: 1 1 1 1 1 1 1 1 1 2 ...
## ..$ 拍賣日期
##
## 拍賣次數: Factor w/ 5 levels "105/07/12\r\n \r\n\r\n 第1拍",..: 1 1 1 1 1 1 1 1 1 5 ...
## ..$ 縣市 : Factor w/ 5 levels "臺北市\r\n 松山區",..: 2 2 2 2 2 2 2 2 2 5 ...
## ..$ 房屋地址/樓層面積 : Factor w/ 12 levels "台北市松山區慶城街46巷24號三樓\n\r\n \r\n \r\n \r\n \r\n "| __truncated__,..: 4 4 5 8 6 6 6 3 7 12 ...
## ..$ 總拍賣底價(元) : Factor w/ 6 levels "1,200,000","2,340,000",..: 3 3 3 3 3 3 3 3 3 6 ...
## ..$ 點交 : Factor w/ 2 levels "不點交","如備註或使用情形欄所示": 2 2 2 2 2 2 2 2 2 2 ...
## ..$ 空屋 : Factor w/ 1 level "": 1 1 1 1 1 1 1 1 1 1 ...
## ..$ 標 別 : Factor w/ 2 levels "","1": 1 1 1 1 1 1 1 1 1 1 ...
## ..$ 備 註 : Factor w/ 1 level "": 1 1 1 1 1 1 1 1 1 1 ...
## ..$ 看圖 : Factor w/ 1 level "看照片": 1 1 1 1 1 1 1 1 1 1 ...
## ..$ 採通訊投標 : Factor w/ 1 level "否": 1 1 1 1 1 1 1 1 1 1 ...
## ..$ 土地有無遭受污染 : Factor w/ 1 level "查詢": 1 1 1 1 1 1 1 1 1 1 ...
## $ NULL:'data.frame': 1 obs. of 1 variable:
## ..$ 合計件數: 200 件: Factor w/ 1 level "[1]\n \n2\n \n3\n \n4\n \n5\n \n6\n \n7\n \n8\n \n9\n \n10\n \n下一頁>\n \n下10頁>>\n \n最後一頁>>": 1
## $ NULL:'data.frame': 1 obs. of 1 variable:
## ..$ V1: Factor w/ 1 level "": 1
## $ NULL:'data.frame': 14 obs. of 3 variables:
## ..$ V1: Factor w/ 3 levels "","建議您使用800*600全彩及Internet Explorer 8.0版本以上瀏覽器",..: 3 1 1 1 1 1 1 1 1 1 ...
## ..$ V2: Factor w/ 13 levels "","1.","10.",..: 2 6 7 8 9 10 11 12 13 3 ...
## ..$ V3: Factor w/ 13 levels "","本網站拍定資料只保留三個月。",..: 5 7 2 4 12 3 11 6 9 8 ...
## $ NULL:'data.frame': 2 obs. of 3 variables:
## ..$ V1: Factor w/ 2 levels "","司法院\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t資訊處 製作。 對於本系統功能有任何建議,\r\n\t\t\t\t\t\t\"| __truncated__: 2 1
## ..$ V2: Factor w/ 1 level "司法院\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t資訊處 製作。 對於本系統功能有任何建議,\r\n\t\t\t\t\t\t\"| __truncated__: NA 1
## ..$ V3: Factor w/ 1 level "": NA 1
## $ NULL:'data.frame': 1 obs. of 3 variables:
## ..$ V1: Factor w/ 1 level "": 1
## ..$ V2: Factor w/ 1 level "司法院\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t資訊處 製作。 對於本系統功能有任何建議,\r\n\t\t\t\t\t\t\"| __truncated__: 1
## ..$ V3: Factor w/ 1 level "": 1
table[[1]] %>% str
## 'data.frame': 22 obs. of 13 variables:
## $ V1 : Factor w/ 19 levels "","[1]\n \n2\n \n3\n \n4\n \n5\n \n6\n \n7\n \n8\n \n9\n \n10\n \n下一頁>\n \n下10頁>>\n \n最後一頁>>",..: 1 1 1 18 3 10 11 12 13 14 ...
## $ V2 : Factor w/ 10 levels "","100司執字第123806號\r\n \r\n (洪股)",..: NA 9 8 10 2 2 2 2 2 2 ...
## $ V3 : Factor w/ 7 levels "","105/07/12\r\n \r\n\r\n 第1拍",..: NA 1 1 7 2 2 2 2 2 2 ...
## $ V4 : Factor w/ 6 levels "臺北市\r\n 松山區",..: NA NA NA 5 2 2 2 2 2 2 ...
## $ V5 : Factor w/ 13 levels "房屋地址/樓層面積",..: NA NA NA 1 5 5 6 9 7 7 ...
## $ V6 : Factor w/ 7 levels "1,200,000","2,340,000",..: NA NA NA 7 3 3 3 3 3 3 ...
## $ V7 : Factor w/ 3 levels "不點交","點交",..: NA NA NA 2 3 3 3 3 3 3 ...
## $ V8 : Factor w/ 2 levels "","空屋": NA NA NA 2 1 1 1 1 1 1 ...
## $ V9 : Factor w/ 3 levels "","1","標 別": NA NA NA 3 1 1 1 1 1 1 ...
## $ V10: Factor w/ 2 levels "","備 註": NA NA NA 2 1 1 1 1 1 1 ...
## $ V11: Factor w/ 2 levels "看圖","看照片": NA NA NA 1 2 2 2 2 2 2 ...
## $ V12: Factor w/ 2 levels "採通訊投標","否": NA NA NA 1 2 2 2 2 2 2 ...
## $ V13: Factor w/ 2 levels "查詢","土地有無遭受污染": NA NA NA 2 1 1 1 1 1 1 ...
data = table[[1]] %>% data.table
# data
data %<>% .[4:19]
以上是取得表格的code,將它們打包成為一個函式GetDataTable
GetDataTable = function(url){
require(magrittr)
require(data.table)
require(httr)
require(rvest)
require(XML)
require(stringi)
require(RCurl)
res <- GET(url)
htmlFile = getURLContent(url)
htmlFileEncodingUTF8 = stri_encode(htmlFile, attr(htmlFile, "Content-Type")[2], "utf8")
table = htmlFileEncodingUTF8 %>% XML::readHTMLTable(encoding = "UTF-8")
data = table[[1]] %>% data.table
data %<>% .[4:19]
return(data)
}
回到選擇「執行拍賣法院」,利用inspector測試, 選擇執行拍賣法院,記錄各法院的參數代號,如台北地方法院是TPD、新北為PCD、士林SLD…等等
接著進入「拍賣標的」、「拍賣程序與結果」的頁面, 選擇房屋/土地/動產,參數分別是proptype=C52/C51/C54 選擇一般程序/應買公告/拍定價格,參數分別是saletype=1/4/5
撰寫一個函式GetURL,輸入「執行拍賣法院」、「拍賣標的」、「拍賣程序與結果」等參數,即可回傳url
GetURL = function(saletypeX, proptypeX, courtX){
#GetPage函數可以取得該條件參數下可以得到的所有資料有多少頁
GetPage = function(saletypeX, proptypeX, courtX){
request1 = "http://aomp.judicial.gov.tw/abbs/wkw/WHD2A03.jsp"
request2 = "order=odcrm&query_typeX=session&hsimun=all&ctmd=all&sec=all&checkyn=all&emptyyn=all&order=odcrm&930DA782205AEA0FB8EF2F4CFE8D06F4=DB71E651465196BF6CABD297ED8CDD76"
url = paste0(request1, "?", saletypeX,"&", courtX, "&", proptypeX, "&", request2)
htmlFile = getURLContent(url)
htmlFileEncodingUTF8 = stri_encode(htmlFile, attr(htmlFile, "Content-Type")[2], "utf8")
last_item = htmlFileEncodingUTF8 %>% read_html %>% html_nodes(xpath = "//nobr") %>%
as.character %>% tail(1)
start<-regexpr("form.pageNow.value=", last_item)
end<- regexpr("form.submit()", last_item)
page = substr(last_item, start+19, end-2) %>% as.numeric
return(page)
}
#將參數丟入 GetPage 函式中,可得到最大頁數
page = GetPage(saletypeX, proptypeX, courtX) %>% as.numeric
#將頁數範圍也作為一個參數,和其他參數黏合成為url
if(is.na(page)==FALSE){
(pageNow_pageTotal=paste0("pageNow=", 1:page,"&pageTotal=", 1:page))
request1 = "http://aomp.judicial.gov.tw/abbs/wkw/WHD2A03.jsp"
request2 = "order=odcrm&query_typeX=session&hsimun=all&ctmd=all&sec=all&checkyn=all&emptyyn=all&order=odcrm&930DA782205AEA0FB8EF2F4CFE8D06F4=DB71E651465196BF6CABD297ED8CDD76"
url.page=vector()
for(p in 1:length(pageNow_pageTotal)){
url.page[p] = paste0(request1, "?", pageNow_pageTotal[p],"&",
saletypeX,"&", courtX, "&", proptypeX, "&", request2)
}
}
return(url.page)
}
以courtX=“courtX=PCD”,saletypeX =“saletypeX=5”,proptypeX=“proptypeX=C51”為例, 先丟入GetURL函式,得到所有的url,再丟入GetDataTable函式裡即可得到所有資料
urls = GetURL(saletypeX = "saletypeX=5", proptypeX = "proptypeX=C51", courtX = "courtX=PCD")
r2 = lapply(urls, GetDataTable)
result = data.table()
for(i in 1:length(r2)){
r = r2[[i]]
res = data.table("筆次"=r$V1[-1],
"字號"=r$V2[-1] %>% str_replace_all(., "\\s", ""),
"拍賣日期"=r$V3[-1],
"縣市"=r$V4[-1] %>% str_replace_all(., "\\s", ""),
"土地坐落/面積"=r$V5[-1] %>% str_replace_all(., "\\s", ""),
"總拍賣底價(元)"=r$V6[-1],
"總拍定價格(元)"=r$V7[-1],
"採通訊投標"=r$V8[-1],
"土地有無遭受污染"=r$V9[-1]
)
result = rbind(result, res)
}
result
## 筆次 字號 拍賣日期 縣市
## 1: 1 103司執字第43863號(辰股) 105/06/01 新北市鶯歌區
## 2: 2 103司執字第49740號(辰股) 105/06/29 新北市三峽區
## 3: 3 103司執字第49740號(辰股) 105/06/29 新北市三峽區
## 4: 4 103司執字第49740號(辰股) 105/06/29 新北市三峽區
## 5: 5 103司執字第49740號(辰股) 105/06/29 新北市三峽區
## ---
## 131: 131 103司執字第109798號(壯股) 105/04/18 新北市新莊區
## 132: 132 103司執字第132247號(濟股) 105/04/07 新北市林口區
## 133: 133 103司執字第139991號(土股) 105/04/25 新北市板橋區
## 134: 134 103司執字第144839號(壯股) 105/04/18 新北市中和區
## 135: 135 104司執字第1880號(蘭股) 105/04/21 新北市永和區
## 土地坐落/面積
## 1: 中正段小段99-2號0坪x2分之1拍定金額:新台幣32,000元
## 2: 成福段小暗坑小段145號196坪x全部拍定金額:新台幣720,000元
## 3: 成福段小暗坑小段147號451坪x全部拍定金額:新台幣1,640,000元
## 4: 成福段小暗坑小段149號927坪x全部拍定金額:新台幣3,350,000元
## 5: 成福段小暗坑小段1051號2485坪x全部拍定金額:新台幣8,960,000元
## ---
## 131: 思賢段小段949號19坪x4分之1拍定金額:新台幣3,520,000元
## 132: 菁埔段粉寮水尾小段0267號3537坪x84分之2拍定金額:新台幣1,001,000元
## 133: 中山段小段24號441坪x10000分之101拍定金額:新台幣9,660,000元
## 134: 景華段小段608號34坪x8分之1拍定金額:新台幣5,600,000元
## 135: 頂溪段小段701號1275坪x10000分之96拍定金額:新台幣20,470,000元
## 總拍賣底價(元) 總拍定價格(元) 採通訊投標 土地有無遭受污染
## 1: 812,000 815,800 否 查詢
## 2: 16,640,000 16,640,000 否 查詢
## 3: 16,640,000 16,640,000 否 查詢
## 4: 16,640,000 16,640,000 否 查詢
## 5: 16,640,000 16,640,000 否 查詢
## ---
## 131: 3,720,000 4,469,999 否 查詢
## 132: 1,000,000 1,001,000 否 查詢
## 133: 13,440,000 16,060,000 否 查詢
## 134: 3,600,000 6,000,000 否 查詢
## 135: 26,950,000 29,500,000 否 查詢