install.packages("rvest")
install.packages("stringr")

library(rvest)
library(stringr)

# naver 지식인에서 대학생을 검색어로 사용 
# main_url = "https://kin.naver.com/search/list.nhn?sort=none&query=대학생&period=1m&section=kin&page="
main_url = "https://kin.naver.com/search/list.nhn?sort=none&query=%EB%8C%80%ED%95%99%EC%83%9D&period=1m&section=kin&page="

kin_list = character()
title_list = character()
date_list = character()

for(page_url in 1:10){
  
    number = 1
    
    url = paste(main_url,1,sep="")
    content = read_html(url)
    
    link_node = html_nodes(content,"._nclicks\\:kin\\.txt") # from chrome develop mode
    link_node = html_nodes(content,"._searchListTitleAnchor") # from javascript function
    
    link_urls = html_attr(link_node, "href")
    title = html_text(link_node)
    title_list = append(title_list, title)
    
    date_node = html_nodes(content,".txt_inline")
    date = html_text(date_node)
    date = as.Date(gsub("\\.","-",date))
    date_list = append(date_list, date)
    # .c-heading-answer__content
    # #answer_2 > div._endContents.c-heading-answer__content
    #answer_2 > div._endContents.c-heading-answer__content > div
    #answer_3 > div._endContents.c-heading-answer__content > div
    
    for(link in link_urls){
        link = link_urls[2]
        sub_content = read_html(link)
        node1 = html_nodes(sub_content, ".cont_reply .box_collect .txt_collect")
        node1 = html_nodes(sub_content, ".c-heading-answer__content-user p")

        kin = html_text(node1)
        kin = gsub("\n|\t","",kin) 
        realkin = character()
        if(length(kin) != 0){ # 응답이 있을 때 
          for(i in 1:length(kin)){  # 12줄이니까 12번 돌아감 
            if(nchar(kin[i]) != 1){ # 빈 공백 줄 제거
              realkin = append(realkin, kin[i])
            }
          }
          realkin = paste(realkin, collapse="\n")  # realkin : 여러가지 텍스트 collapse: 행 새로 이어질때마다 연결되는 것을 적어줌 
        } else {
          realkin = ""
        }
        kin_list = append(kin_list, realkin)

        print(sprintf("Number of article is %d", number))
        number = number + 1 
    }
}

df = data.frame(date_list, title_list, kin_list)
df = df[order(df$date_list,decreasing = FALSE),]
colnames(df) = c("date","title","kin_reple")

write.csv(df, "naver_kin_대학생.csv", row.names = F)

# page_url = 2
# link <- link_urls[1]
# 위에서 node1을 선택할 때:
## - ".icon_check_adopt"로 노드를 식별하고,
## - 그 text가 "지식인채택" 또는 "질문자채택"을 갖는 node만 선택할 수 있다.
## - 또는 아직 ".icon_check_adopt"로 노드만 존재할 수도 있고,
## - 아직 전혀 답변이 없는 질문이 있을 수도 있다.
## - 각 채택 유형을 또다는 변수로 지정하고,
## - "질문자채택" > "지식인채택" > "마지막 답변" > "" 로 kin_list에 담을 수 있다.
## - 이경우 nodes를 식별하기 위한 css selector는 ".c-heading-answer__content-user"를 사용한다.


main_url = "https://tip.daum.net/search?query=파이썬&minIdx=&maxIdx=&action=0&pageNumber="

kin_list = character()
title_list = character()
date_list = character()

for(page_url in 1:10){
  
  number = 1
  
  url = paste(main_url,page_url,sep="")
  content = read_html(url)
  
  link_node = html_nodes(content,".box_collect .tit_collect a") # from chrome develop mode
  link_node = html_nodes(content,".tit_collect a") # from javascript function
  
  link_urls = html_attr(link_node, "href")
  title = html_text(link_node)
  title_list = append(title_list, title)
  
  date_node = html_nodes(content,".info_append .txt_time")
  date_node = html_nodes(content,".txt_time")
  
  date = html_text(date_node)
  date = as.Date(gsub("\\.","-",date))
  date_list = append(date_list, date)
  
  for(link in link_urls){
    link = paste("https://tip.daum.net",link,sep='')
    
    
    sub_content = read_html(link)
    node1 = html_nodes(sub_content, ".cont_reply .box_collect .txt_collect p")
    node1
    
    kin = html_text(node1)
    kin = gsub("\n|\t|\u00a0","",kin) 
    realkin = character()
    
    if(length(kin) != 0){ # 응답이 하나라도 있을 때.
      for(i in 1:length(kin)){  # 12줄이니까 12번 돌아감 
        if(nchar(kin[i]) != 0){ # 빈 공백 줄 제거
          realkin = append(realkin, kin[i])
        }
      }
      realkin = paste(realkin, collapse="\n")  # realkin : 여러가지 텍스트 collapse: 행 새로 이어질때마다 연결되는 것을 적어줌 
    } else {
      realkin = ""
    }
    kin_list = append(kin_list, realkin)
    
    print(sprintf("Number of article is %d", number))
    number = number + 1 
  }
}

df = data.frame(date_list, title_list, kin_list)
df = df[order(df$date_list,decreasing = FALSE),]
colnames(df) = c("date","title","kin_reple")

write.csv(df, "daum_tip_파이썬.csv", row.names = F)

+ Recent posts