아래 포스팅에 이어지는 포스팅입니다.
https://bluediary8.tistory.com/105
우선 저장했던 pagedata를 불러들인 다음 structure를 확인 해 보도록 하죠
data<-read.csv("pagedata.csv")
str(data)
title과 url_list모두 factor형 변수로 되어있는 것을 알 수 있습니다. 문자열이기 때문에 강제로 문자형으로 바꿔주도록 하겠습니다.
그리고 첫번째 url을 readlines하도록 하겠습니다.
url_list<-as.character(data[,2])
b<-readLines(url_list[1],encoding="UTF-8")
이제 첫번째 url값을 복사 한다음에 크롬에서 접속을 해보죠
다음과 같은 게시물인데, 이제 내용을 수집 해야 합니다.
페이지 소스보기로 가시죠.
내용으로 검색을하면 여러 군데가 나오긴 합니다만. 안정적인 규칙을 위해 <body> </body>사이에있는 내용을 가져오도록 하죠.
그래서 위 tag가 있는 line을 찾아보니 두개가 나옵니다. 그래서 이 규칙외에 다른 규칙을 찾는게 좋을 듯 싶습니다.
위 캡쳐화면을 다시 보시면, post_content와 post_ccls가 있는 것을 보실수 있습니다.
이 규칙을 가져와보도록 하죠 .
which(str_detect(b,"post_content"))
which(str_detect(b,"post_ccls"))
이번에는 규칙을 잘 찾은 것 같습니다.
내용은 저 두 line사이에 존재하기 때문에 저 사이에있는 값들을 가져와야 합니다.
b vector안에서 index1부터 ~ index2까지 있는 내용을 가져오면 되겠죠? 아래 캡쳐화면 처럼 내용이 들어가 있는 것을 볼 수 있습니다.
index1<-which(str_detect(b,"post_content"))
index2<-which(str_detect(b,"post_ccls"))
b[index1:index2]
현재 우리가 추출한 것은 문자형 벡터입니다. 이걸 하나의 값으로 합쳐 주어야합니다. paste 함수를 활용해 보죠.
paste(b[index1:index2],collapse = " ")
이전에 다루었던 gsub함수를 이용해서 tag들을 제거해보죠.
con<-paste(b[index1:index2],collapse = " ")
gsub("<.*?>|\t","",con)
조금 더 깔끔하게 정리하기 위하여, str_trim함수를 이용해서 공백을 제거해보죠
이렇게 우리는 첫번째 게시글의 내용을 깔끔하게 불러왔습니다.
con<-paste(b[index1:index2],collapse = " ")
con2<-gsub("<.*?>|\t","",con)
str_trim(con2)
여기까지 진행한 코드를 정리해보면 다음과 같습니다.
url_list<-as.character(data[,2])
b<-readLines(url_list[1],encoding="UTF-8")
index1<-which(str_detect(b,"post_content"))
index2<-which(str_detect(b,"post_ccls"))
con<-paste(b[index1:index2],collapse = " ")
con2<-gsub("<.*?>|\t","",con)
con3<-str_trim(con2)
이제 for문을 돌려서 우리가 수집한 url_list에 대해 전부 수집해보도록 하겠습니다.
url_list<-as.character(data[,2])
final_con<-c()
for(i in 1:length(url_list)){
b<-readLines(url_list[i],encoding="UTF-8")
index1<-which(str_detect(b,"post_content"))
index2<-which(str_detect(b,"post_ccls"))
con<-paste(b[index1:index2],collapse = " ")
con2<-gsub("<.*?>|\t","",con)
con3<-str_trim(con2)
final_con[i]<-con3
cat("\n",i)
}
clien<-cbind(final,final_con)
write.csv(clien,"clien.csv",row.names = F)
저장까지 하고 확인 해주시면 끝!!
'R-크롤링' 카테고리의 다른 글
R크롤링 - Clien 커뮤니티 게시글 크롤링2 (0) | 2020.07.01 |
---|---|
R크롤링 - Clien 커뮤니티 게시글 크롤링1 (0) | 2020.06.30 |
셀레늄을 통한 네이버 로그인 (0) | 2019.12.12 |
이미지 크롤링 (0) | 2019.12.12 |
dotax (다음카페) 크롤링 (0) | 2019.12.12 |
댓글