html로 생성된 웹사이트의 경우 rvest패키지로 스크래핑이 가능하다. 정말 쉽다.
이전에 학습해놓고 까먹어서 다시 한번 정리
read_html()
html_node() / html_nodes()
html_text()
이 3가지 함수만 알아두면 스크래핑이 가능하다.
예제로 네이버 tv캐스트 <청춘시대>에 올라온 동영상 목록들을 긁어와 보도록 한다
url_tvcast = "http://tvcast.naver.com/jtbc.youth"
#해당 url을 새로운 변수에 저장한다
html_tvcast = read_html(url_tvcast, encoding = "UTF-8")
#url에서 html파일을 읽어오고 저장한다
이제 html에서 우리가 추출하고자 하는 부분을 찾아야 한다.
크롬 개발자도구를 열고 찾아보니 <dt class = "title">이란 태그안에 제목이 들어가 있다.
#이런 형식 ㅇㅇ
<dt class = "tilte">
<a>
<tooltip>여기에 제목이 있넹</tooltip>
</a>
</dt>
html_node() / html_nodes() 함수는 css, xpath로 원하는 부분을 추출할 수 있다.
tag, class, id 모두로 찾을 수 있다는 말이다.
html_node()는 매칭되는 한 요소만 반환하고, html_nodes()는 모든 요소를 반환한다.
id를 찾을 경우에는 html_node()를 사용하면 되고. tag, class로 같은 요소를 모두 추출하고자 할 경우에는 html_nodes()를 사용하면된다.
여기서는 class가 title인 요소들 전부를 추출하니까 html_nodes()로 추출해본다
html_tvcast %>% html_nodes(".title a")
#class가 title인 부분에서 안에 있는 a태그에 해당하는 내용을 추출한다
html_tvcast %>% html_nodes(".title a") %>% html_text()
#그 안에 있는 text만 추출한다
tvcast_df = html_tvcast %>% html_nodes(".title a") %>% html_text() %>% data.frame()
#데이터프레임으로 바꿔주고 저장한다
웹 상에 <table> 태그로 존재하는 요소를 table(표) 그대로 가져올 수 있다.
http://en.wikipedia.org/wiki/Student%27s_t-distribution
이 페이지에 table 태그로 된 표가 있는데. html_table()을 이용해서 표 그대로 가져올 수 있다.
html_wiki %>% html_nodes(".wikitable") %>% html_table()
#table의 class명인 "wikitable을 이ㅇ해서 가져온다"
html_text() #텍스트를 추출한다
html_name() #attribute의 이름을 가져온다
html_children() #해당 요소의 하위 요소를 읽어온다.
html_tag() #tag이름 추출
html_attrs() #attribute을 추출한다
*attribute이 뭐냐면 (나도 몰라서 검색해봤다)
rvest로 모든 페이지를 스크래핑할 수 있으면 좋겠지만. 자바스크립트로 생성된 페이지의 경우에는 다른 방법을 써야한다. Phantom.js + rvest / RSelenium을 사용하면 데이터를 가져올 수 있을 것 같다. 곧 공부하고 블로그에 포스팅할 예정.
CONTACT