지난번 1편에서 "대전광역시"에 대한 정보만 포함된 데이터를 통해 정보를 추출하였다.
이번엔 전국 정보에서 "대전광역시"에 대한 정보만을 추출해보자.
1편: https://danha23.tistory.com/13
간단하다!
URL을 불러오는 과정에서 paste() 대신, GET() 함수를 사용하는 것이다.
library(XML)
library(httr)
library(dplyr)
library(tidyverse)
rm(list=ls()) # R 데이터 전체 삭제
serviceUrl <- "http://openapi.tour.go.kr/openapi/service/TourismResourceService"
oper_serve <- "/getTourResourceList"
my_key <- "본인 서비스키"
# 전체 오픈API 호출 전 단계
res <- GET(url=str_c(serviceUrl, oper_serve),
query=list(SIDO = "대전광역시",
GUNGU = "유성구",
serviceKey = I(my_key)))
xml_data <- xmlParse(res$url) # XML 불러온 결과 확인
위 코드를 통해 대전광역시 유성구에 대한 정보가 잘 출력되는지 확인한다.
아래 결과를 보면, 필요한 정보는 <item> 안에 포함되어 있다.
필자는 <item> 안에 있는 정보를 추출하여 데이터프레임 형식으로 저장할 것이다.
목표 : 대전광역시 유성구에 대한 관광자원 정보 추출
all_data <- xmlTreeParse(res$url, useInternalNodes=TRUE, encoding="UTF-8")
rootNode <- xmlRoot(all_data)
numOfRows <- as.numeric(xpathApply(rootNode, "//numOfRows", xmlValue))
totalCount <- as.numeric(xpathApply(rootNode, "//totalCount", xmlValue))
loopCount <- ceiling(totalCount/numOfRows)
# 전체 오픈API 호출
final_Data <- data.frame()
i <- 1
for (i in 1:loopCount){
url <- GET(url=str_c(serviceUrl, oper_serve),
query=list(SIDO = "대전광역시",
GUNGU = "유성구",
serviceKey = I(my_key)))
doc <- xmlTreeParse(res$url, useInternalNodes=TRUE, encoding="UTF-8")
rootNode <- xmlRoot(doc)
xmlData <- xmlToDataFrame(nodes=getNodeSet(rootNode, '//item'))
final_Data <- rbind(final_Data, xmlData)
cat(i, "\n")
}
View(final_Data)
write.csv(final_Data, "final_apidata.csv", row.names = FALSE, fileEncoding = "euc-kr")
'분석가 Step 1. 데이터 분석 > R' 카테고리의 다른 글
공공데이터포털 오픈 API 불러오기 1편 (0) | 2023.03.17 |
---|---|
데이터 입력 오류(인코딩 문제) 간단히 해결하기 (0) | 2023.03.16 |
데이터 입력 오류(인코딩 문제) 해결하기 (0) | 2023.03.16 |
웹 크롤링(Web Crawling)으로 데이터 수집하기(2) (0) | 2023.03.16 |
웹 크롤링(Web Crawling)으로 데이터 수집하기(1) (0) | 2023.03.16 |