크롤링 기법을 통해 특정 사이트로 부터 검색어 기반의 데이터를 수집한다. 웹 사이트의 페이지를 기계적으로 받아와, 정확한 부분만을 추출할 수 있다. 그렇게 수집한 데이터는 csv 파일로 변환하여 저장가능하다.
#day04_01_crawling.R
#r을 활용, 특정사이트로 부터 검색어 기반의 데이터를 모으기
install.packages('rvest')
install.packages('dplyr')
library(rvest)
library(dplyr)
#1. 사이트 이동
#url 얻기
#http://jtbc.joins.com/search/news?term=빅데이터
my_keyword = '빅데이터'
url = 'http://jtbc.joins.com/search/news?term='+ my_keyword
read_html(url)
#긁어오고 싶은 페이지를 4개정도 미리 수동으로 가져오기
#http://jtbc.joins.com/search/news?page=4&term=%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0
my_url = NULL
for(x in 1:5){
my_url[x]<-paste0('http://jtbc.joins.com/search/news?page=',x,'&term=',my_keyword)
}
my_url
#2.해야할 작업이 무엇인지 정의
#제목을 클릭해서 해당 기사의 본문을 가져오기
#class="sch_replay_list news_list btm_line"
my_links<- NULL
#my_url의 각 방의 url 정보를 이용하여 my_links에 본문의 주소 50개를 채워라
a<-read_html(my_url[1])
b<-html_node(a,'.sch_replay_list') #띄어쓰기로 클래스 구분되기 때문
c<-html_nodes(b,'.txt_ttl')
html_attr(c,'href') #href의 속성 리턴 html_attr()
#본문 주소 50개 가져오기
for(i in 1:5){
a<-read_html(my_url[i])
b<-html_node(a,'.sch_replay_list') #클래스에 매칭되는 요소를 반환 받기 위해서 .을 이용한다.
c<-html_nodes(b,'.txt_ttl') #txt_ttl의 'href' 요소를 받아온다.
href<-html_attr(c,'href')
print(href)
print('')
}
#정답
for(i in my_url){
print(i)
a<-read_html(i)
b<-html_node(a,'.sch_replay_list')
c <- html_nodes(b , '.txt_ttl')
my_links<-c(my_links,html_attr(c,'href'))
# c는 txt_ttl의 요소가 담겨져 있다. 이에 html_attr(c,'href')를 통해 txt_ttl의 href의 속성을 가지고 오게 된다. my_links에는 현재는 비어있는 my_links와 c의 'href'의 링크가 벡터형태로 저장된다. my_links는 for 문이 반복될 때마다, 링크들이 누적되어 벡터형태로 저장된다.
}
my_links #실행 시 본문 50개 출력
txts<- NULL
a<- read_html(my_links[1])
b<- html_node(a,'#articlebody')
#b로부터 text 만 긁어오기
html_text(b)
my_links
txts<- NULL
txts #검색하면 본문 50개의 txt 조회
for(i in my_links){ #my_links 에는 50개의 링크가 들어있다.
a<-read_html(i) #read_html을 통해 50개 링크의 html을 읽어온다.
b<- html_node(a,'#articlebody') #html_nodes를 통해 articlebody id에 매칭되는 html 가져온다.
txts<-c(txts,html_text(b))
}
txts
b
write.csv(txts,'G:/내 드라이브/Bigdata_AIB/r_src_koreait/r_src/my_crawling.csv')
#day04_01_crawling.R
#r을 활용, 특정사이트로 부터 검색어 기반의 데이터를 모으기
install.packages('rvest')
install.packages('dplyr')
library(rvest)
library(dplyr)
#1. 사이트 이동
#url 얻기
#http://jtbc.joins.com/search/news?term=빅데이터
my_keyword = '빅데이터'
url = 'http://jtbc.joins.com/search/news?term='+ my_keyword
read_html(url)
#긁어오고 싶은 페이지를 4개정도 미리 수동으로 가져오기
#http://jtbc.joins.com/search/news?page=4&term=%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0
my_url = NULL
for(x in 1:5){
my_url[x]<-paste0('http://jtbc.joins.com/search/news?page=',x,'&term=',my_keyword)
}
my_url
#2.해야할 작업이 무엇인지 정의
#제목을 클릭해서 해당 기사의 본문을 가져오기
#class="sch_replay_list news_list btm_line"
my_links<- NULL
#my_url의 각 방의 url 정보를 이용하여 my_links에 본문의 주소 50개를 채워라
a<-read_html(my_url[1])
b<-html_node(a,'.sch_replay_list') #띄어쓰기로 클래스 구분되기 때문
c<-html_nodes(b,'.txt_ttl')
html_attr(c,'href') #href의 속성 리턴 html_attr()
#본문 주소 50개 가져오기
for(i in 1:5){
a<-read_html(my_url[i])
b<-html_node(a,'.sch_replay_list') #클래스에 매칭되는 요소를 반환 받기 위해서 .을 이용한다.
c<-html_nodes(b,'.txt_ttl') #txt_ttl의 'href' 요소를 받아온다.
href<-html_attr(c,'href')
print(href)
print('')
}
#정답
for(i in my_url){
print(i)
a<-read_html(i)
b<-html_node(a,'.sch_replay_list')
c <- html_nodes(b , '.txt_ttl')
my_links<-c(my_links,html_attr(c,'href'))
# c는 txt_ttl의 요소가 담겨져 있다. 이에 html_attr(c,'href')를 통해 txt_ttl의 href의 속성을 가지고 오게 된다. my_links에는 현재는 비어있는 my_links와 c의 'href'의 링크가 벡터형태로 저장된다. my_links는 for 문이 반복될 때마다, 링크들이 누적되어 벡터형태로 저장된다.
}
my_links #실행 시 본문 50개 출력
txts<- NULL
a<- read_html(my_links[1])
b<- html_node(a,'#articlebody')
#b로부터 text 만 긁어오기
html_text(b)
my_links
txts<- NULL
txts #검색하면 본문 50개의 txt 조회
for(i in my_links){ #my_links 에는 50개의 링크가 들어있다.
a<-read_html(i) #read_html을 통해 50개 링크의 html을 읽어온다.
b<- html_node(a,'#articlebody') #html_nodes를 통해 articlebody id에 매칭되는 html 가져온다.
txts<-c(txts,html_text(b))
}
txts
b
write.csv(txts,'G:/내 드라이브/Bigdata_AIB/r_src_koreait/r_src/my_crawling.csv')
댓글
댓글 쓰기