본문 바로가기
R-크롤링

R크롤링 - Clien 커뮤니티 게시글 크롤링1

by 미스터탁 2020. 6. 30.

이번 포스팅부터 크롤링에 대해 다루어 보도록 하겠습니다.

 

크롤링은 '긁다'라는 뜻을 지니고 있습니다. 웹에 있는 자료 또는 데이터를 수집하는 행위를 웹크롤링 이라고 합니다.

 

인간이하면 ctrl + c , ctrl + v를 수백 수천번 해야하지만 코드를 작성하면 비교적 수월하게 수집을 할 수가 있죠.

 

 

우선 아래의 주소로 들어가 클리앙이라는 커뮤니티에 접속을 해보죠

 

 

https://www.clien.net/service/

 

클리앙

아들2호 카메라 잡은 날 둘째. 카메라에 관심을 보인 날. 집에 와서 살펴보니 죄다 촛점, 노출 안맞아서 소니 미러리스로 바꿀까 고민중이에요. 7 06-30

www.clien.net

 

 

여기서 모두의 공원 탭으로 들어가보죠

 

https://www.clien.net/service/board/park

 

클리앙 : 모두의공원

차단글 : 0건 내가본글 공지 845.6 k 05-072017-05-07 02:00:28

www.clien.net

 

우리는 이 모두의 공원 탭안에 있는 게시글을 수집 해 볼 겁니다.

 

 

 

대부분의 웹사이트는 html 소스 기반으로 이루어져 있습니다.

 

이 html 소스에는 보통 규칙이 있구요. 우리는 이 규칙을 통해 우리가 원하는 데이터를 수집할 겁니다.

 

 

웹크롤링의 기본 단계는 다음과 같습니다.

 

1. 진짜 주소 찾기.

2. 규칙 찾기

3. 원하는 정보 추출하고 가공하기

 

 

현재 위 캡쳐화면을 보시면 

 

"https://www.clien.net/service/board/park" 로 되어 있습니다.

 

현재 주소에서 2페이지로 가보도록 하겠습니다.

 

그럼 주소가 "https://www.clien.net/service/board/park?&od=T31&po=1" 로 바뀌는 것을 확인 할 수 있죠.

 

 

 

3페이지를 가보도록 하죠.

 

주소가 "https://www.clien.net/service/board/park?&od=T31&po=2" 로 바뀝니다.

 

즉 마지막 부분이 po=pagenumber 로 되어있는 것을 알 수 있고. 우리가 for문을 이용해서 pagenumber를 i로 바꿔서 수집할수 있겠구나 라는 것을 짐작해 볼 수 있죠. 이 주소가 우리가 찾은 진짜 주소입니다

 

 

 

 

 

대부분의 게시판형 커뮤니티가 마찬가지이지만, 아래화면처럼 현재 주소에는 제목, 글쓴이, 조회수, 날짜 등이 나와있고 제목을 클릭하면 안의 게시글을 볼수가 있죠.

 

그래서 우리는 두번의 작업에 걸쳐서 크롤링이 진행되어야합니다

 

1. 제목, 조회수, 게시글 url 수집

2. 게시글 내용 수집

 

 

 

 

우선 

1. 제목, 조회수, 게시글 url 수집

을 진행해 보도록 하죠

 

 

아래화면의 빈곳 ( 파란 부분) 을 우측 마우스클릭 -> 페이지 소스보기로 들어갑니다.

 

 

 

다음과 같은 화면이 나올텐데요. 웹페이지들은 실제로 이런 코드들로 구성이 되어있다라는 것입니다.

 

이제 url "https://www.clien.net/service/board/park?&od=T31&po=0" 을 R에서 불러오도록 하겠습니다.

 

 

 

아래 처럼 우선 첫번째 페이지 주소를 url로 설정하고 readLines함수를 통해서 R로 불러들입니다.

 

encoding option은 거의 항상 UTF-8로 고정 하시면 됩니다.

 

(가끔 한글이 깨질시 EUC-KR로 지정해주시면 됩니다.)

 

url<-'https://www.clien.net/service/board/park?&od=T31&po=0'
b<-readLines(url,encoding = "UTF-8")

 

 

아래와 같이 경고 메세지가 뜨는데 무시하시면 됩니다. 

 

 

 

 

head함수를 통해 잘 불러왔는지 확인해보죠

 

head(b,30)

 

 

페이지 소스보기를 통해서 봤던 것과 정확히 일치하는 것을 볼수 있죠

 

즉, url을 R에서 readlines를 하게 되면 해당 웹 페이지 소스보기를 통해서 나온 코드를 가져온다 라는 것이죠.

 

 

 

 

여기서 우리는 이제 규칙을 찾아야 합니다.

 

게시판에 가서 특정 게시글의 제목 일부분을 복사합니다.

 

 

그리고 페이지 소스 보기 화면에서 Ctrl + F 를통해서 아까 복사했던 부분을 찾아냅니다.

 

 

복사했던 제목이 페이지 소스에서는 저기에 위치해 있는 것을 알 수 있죠.

 

페이지를 조금만 더 내려보면 아래와 같이 다른 게시글의 제목도 있는 것을 알 수 있죠

 

 

 

여기서 제목이 있는 line을 찾아낼 만한 규칙을 알아내야합니다.

 

제가 발견한 규칙은 제목이 있는 line에 항상 'subject_fixe' 라는 코드가 들어간다는 것입니다.

 

 

 

stringr 패키지를 호출하고 "subject_fixed"가 있는 line만 가져와 보죠

 

library(stringr)
b[str_detect(b,"subject_fixed")]

 

아래 화면처럼 제목이 있는 line만 잘 가져와 진 것을 볼 수 있죠

 

 

gsub함수를 통해 <> 안에있는 tag 코드들을 지워줍니다.

 

b2<-b[str_detect(b,"subject_fixed")]
gsub("<.*?>","",b2)

 

 

더불어 \t tag까지 지워주면 아래와 같이 어느정도 깔끔하게 제목을 수집할 수 가 있습니다.

b2<-b[str_detect(b,"subject_fixed")]
b3<-gsub("<.*?>","",b2)
title<-gsub("\t","",b3)
title

 

 

여기까지가 웹 크롤링의 매우매우 기초적인 방법이라고 할 수 있습니다.

 

이렇게 규칙을 찾고 원하는 정보만 가져오기만 하면 됩니다.

 

다음 포스팅에 이어서 적도록 하겠습니다.

반응형

댓글