류동균의 R 공부방입니다.
R 코드로 크롤링을 통한 파일 다운받기 본문
인터넷에 많은 파일들을 다운받아본적이 있을 것이다. 예를들어 기출문제 같은것을 사이트에서 다운받을때 일일이 특정회차 에 들어가 파일을 다운받고 또다시 다음회차글에 들어가 다운을받고 나오는 작업을 반복적으로 한 경험이 있을 것이다. 이러한 작업을 R 코드로 자동으로 해주는 방법이 있어 블로그에 글을 쓰게 되었다. 그럼 시작해보자
“최강 자격증 기출문제 전자문제집 CBT”이라는 곳에서 리눅스 마스터 2급 기출문제집을 다운받을 예정이다. (링크 : https://www.comcbt.com/xe/r2)
링크에 접속하면 다음과 같은 화면이 나올것이다. 우리가 필요한것은 빨간색으로 표시된 교사용, 학생용 파일이다.
폴더생성
파일을 다운로드 받기위해 폴더를 하나 생성해주어야 한다. 다음과 같이 실행해보자. 실행 했다면 빨간색표시와 같이 지정한 디렉토리가 하나 생길 것이다.
# 경로 설정
dirname <- "linux_master_2"
# 폴더 생성
dir.create(dirname)
크롤링
1. 크롤링을 하기에 앞서 Url을 확인해야한다. 페이지가 3개까지 존재하는데 페이지에따라 Url이 page = 1, 2, 3 과 같이 바뀌는 것을 확인할 수 있다.
2. 페이지번호를 제외한 default url을 만들어주고 for문에 paste0() 함수를 사용해서 뒤에 page 번호를 붙이자.
for(page_num in 1:3) {
defualt_url <- "https://www.comcbt.com/xe/index.php?mid=r2&page="
lm_2_url <- paste0(defualt_url,page_num)
3. read_html() 함수를 사용하여 url을 html로 읽어오자.
# url html로 읽어오기
lm_2_html <- read_html(lm_2_url)
4. page에서 class명을 착고 a태그, href를 뽑아주어야한다 이를위해 F12버튼을 눌러서 확인할 수 있다. 또한 여기서 1~3줄은 필요없는 내용임으로 없애준다.
# 해당 Table css
lm_2_table <- lm_2_html %>%
html_nodes(".bd_lst.bd_tb_lst.bd_tb")
# 각 리스트의 href 읽어오기
lm_2_file_url <- lm_2_table %>%
html_nodes(".title") %>%
html_node("a") %>%
html_attr("href")
# 첫 1~3 줄은 필요 없는 내용이므로 없앰
lm_2_file_url <- lm_2_file_url[-(1:3)]
5. 각 페이지의 Url을 알아냈으니0 for문으로 각 페이지를 들어가서 다운로드 해야 할 링크를 확인한다.
# 각 Url 로 접근 하여 파일을 뽑아오기
for(for_url in lm_2_file_url) {
# Download url 가져오기
file_url <- read_html(for_url) %>%
html_nodes(".rd_fnt.rd_file") %>%
html_nodes("a") %>%
html_attr("href")
# Download name 생성
file_name <- read_html(for_url) %>%
html_nodes(".rd_fnt.rd_file") %>%
html_nodes("a") %>%
html_text()
6. 파일 다운로드하기
이제 각각의 다운로드 링크와, 파일명을 가져왔으니 download.file() 함수를 사용하여 파일을 다운로드 받아보자.
# 교사용, 학생용 파일 다운로드
for(count in 1:2) {
destfile_name <- paste0(getwd(),"/",dirname,"/",file_name[count])
download.file(file_url[count],destfile = destfile_name)
}
# 위에서 쓴 for문 닫기
}
}
위와같이 하여 간단하게 R을 사용하여 파일을 다운로드 받아보았다. 익숙해지면 Url과 필요한 태그들만 바꾸어 다른사이트에서도 유용하게 쓸 수 있다고 생각한다.
참고 : 미완성의 신
'ETC' 카테고리의 다른 글
네이버 날씨 크롤링, Rmd보고서 작성 (0) | 2019.10.24 |
---|---|
R을 통한 시스템 자동화 기초 (0) | 2019.10.15 |
프로젝트 관리 툴 트렐로(Trello) (0) | 2019.10.14 |
업무 협업 툴 슬랙(Slack) (0) | 2019.10.14 |
R 시각화 기초 plot (0) | 2019.09.16 |