다음과 같은 페이지에서 1-10위까지 목록을 추출하는 방법을 알아보자.
R사의 베스트셀러 페이지이며, 주소는 다음과 같다.
https://ridibooks.com/bestsellers/general?order=monthly
일단, 웹페이지를 가져오려면 httr 패키지가 필요하다.
library(httr)
처음 보는 패키지라면 다음과 같이 설치해 주자.
install.packages('httr')
패키지를 불러왔다면 GET 함수 안에 위 주소를 넣고 웹페이지를 불러온다.
web=GET('https://ridibooks.com/bestsellers/general?order=monthly')
다음과 같이 <!DOCTYPE html> 로 시작하는 202 kB 의 문서가 잘 들어온 것을 확인할 수 있다.
이제 이 HTML 문서 어딘가에 있을 책의 제목, 저자, 출판사 등의 정보를 추출하면 되겠다.
일단 XML 패키지의 htmlParse 함수로 해당 html 을 변환해 두자. 이후 진행에 필요한 과정이다.
library(XML)
web=htmlParse(web)
제목을 특정하여 찾기 위해, 아까의 웹페이지로 돌아가 책 제목에 마우스를 대고 오른쪽 버튼 - [검사] 메뉴를 호출한다.
우리가 원하는 [무례한 사람에게 웃으며 대처하는 법] 이라는 제목은 <span class="title_text"> 와 </span> 이라는 태그에 둘러싸여 있다.
파랗게 선택된 영역에서 오른쪽버튼 - [copy] - [copy XPath]를 누르자.
XPath 는 해당 요소의 고유 주소라고 생각하면 되겠다.
복사된 XPath 는 다음과 같다.
//*[@id="page_best"]/div[2]/div[2]/div[2]/h3/a/span
시험 삼아 2위인 [혼자하는 공부의 정석]의 제목에 마우스를 두고 오른쪽버튼 - [검사]로 XPath 를 확인해 본다. 이번에는 다음과 같다.
//*[@id="page_best"]/div[2]/div[3]/div[2]/h3/a/span
대략 어떤 방식으로 움직이는지 알겠다. 이제 첫 번째 요소를 불러보자. xpathSApply라는 함수를 사용한다.
xpathSApply(저장된 html 문서, 원하는 요소의 XPath, xmlValue) 와 같이 적자.
xpathSApply(web, '//*[@id="page_best"]/div[2]/div[2]/div[2]/h3/a/span', xmlValue)
결과에 줄바꿈을 의미하는 \n과 공백이 있으므로
2016/09/26 - [R] - [R.아르] 찾아바꾸기 gsub() 에 등장한 gsub 을 사용하여 없애 주자.
x = xpathSApply(web, '//*[@id="page_best"]/div[2]/div[2]/div[2]/h3/a/span', xmlValue)
x = gsub("\n", "", x)
x = gsub(" ", "", x)
제목만 추출해 내었다.
이제 반복문을 이용해 같은 작업을 반복하면서 하나의 문서에 이어 붙이면 되겠다.
일단 xpath 의 바꿔야 하는 부분을 기준으로 텍스트를 나누어 주자
//*[@id="page_best"]/div[2]/div[ 2 ]/div[2]/h3/a/span
이렇게 두 부분이므로
xpath1 = '//*[@id="page_best"]/div[2]/div['
xpath2 = ']/div[2]/h3/a/span'
이렇게 나눈 후 다음과 같이 paste0를 활용해 for 문 안에서 다시 xpath를 만들도록 한다.
xpath = paste0(xpath1, i, xpath2)
(참고: 2016/09/22 - [R] - [R. 아르] 내용 합치기 paste())
이제 빈 벡터를 하나 만들고
title = c()
반복문은 다음과 같이 구성하면 되겠다.
for(i in 1:10){
xpath = paste0(xpath1, i+1, xpath2)
x = xpathSApply(web, xpath, xmlValue)
x = gsub("\n", "", x)
x = gsub(" ", "", x)
title[i] = x
}
바뀌는 숫자가 2부터 시작하므로 i+1 로 지정해 주었다.
여기까지를 모두 실행한 결과는 다음과 같다.
1위부터 10위까지 제목 추출이 완료되었다.
'R' 카테고리의 다른 글
[R.아르] TermDocumentMatrix를 표로 전환하는 과정에서 에러가 날 때 (0) | 2017.11.01 |
---|---|
[R.아르] TDM에서 tokenize 가 동작하지 않을 때 (형태소 분석) (0) | 2017.10.19 |
[R.아르] Term Document Matrix 생성시 한글 인코딩이 깨질때 (9) | 2017.10.18 |
[R. 아르] KoNLP 패키지에서 에러가 날 때 (25) | 2017.10.16 |
[R. 아르] 언어 설정하기 / MDI, SDI 설정하기 (0) | 2017.10.12 |
[R.아르] 통계 프로그램 R 설치하기 (0) | 2017.10.11 |
[R.아르] 특정 단어가 들어있는 문장 추출하기 (0) | 2016.12.06 |
[R.아르] 문장에서 보통명사만 추출하기(2) (2) | 2016.12.06 |
[R.아르] 문장에서 보통명사만 추출하기(1) (4) | 2016.12.06 |
[R.아르] 문장에서 명사 추출하기 (5) | 2016.11.22 |
댓글