Base/R

[R] R을 활용한 크롤링 - 로또 1등 당첨 배출점 크롤링 하기

반응형

해당 사이트의 배출점을 크롤링하겠다. 단순 페이지 크롤링에서 스크립트 기능까지 사용하는 크롤링 까지 하겠다.

 

크롤링을 하기 위해서는 첫번째로 내가 원하는 데이터의 위치를 알아야 한다.

저 배출점의 데이터 얻기 위해서는 개발자 도구(F12)에서 해당 부분을 클릭하면 아래와 같이 나온다. 이제 이 부분을 크롤링하기 위해 준비하자.

 

 

#html 소스 가져오기

rvest는 R의 웹 스크래핑(Web Scraping)을 위한 패키지로 해당 패키지를 인스톨하고 라이브러리로 넣어준다.

url은 해당 사이트의 주소이다. 

link 값에 html을 read 하고 확인하면 아래와 같이 해당 html 소스를 가져온 것을 볼 수 있다.

※ class는.으로 찾아들어가고 id는 #으로 찾아들어간다.

 

 

#해당 값 가져오기

여기서부터는 해당 태그 부분에 들어가는 작업이다.

1. 로드워킹

2. 디렉트

 

 

가져온 값을 lotto15라는 값에 넣는다.

 

 

#전처리 작업

필요 없는 값을 지워주기 위해 전처리를 한다.

 

데이터 전처리 후 출력 값이다.

 

 

#데이터를 정형화

이제 가지고 데이터를 정형화하는 방법

지금 현재 값이 vector로 순서대로 들어있다. 두 번째 값에는 이름 세 번째 값에는 번호 네 번째 값에는 address 가 들어있다. 그래서 이걸 

5로 나눠서 나머지 값이 2,3,4 일 때 저장하는 조건으로 for문을 만들었다. 이걸 다 만든 후 data.frame으로 출력하면 

아래와 같은 값이 나온다.

정리돼서 나오는 것을 볼 수 있다.

 

 

 


#셀레니움을 이용한 페이지 자동화 크롤링

 

첫 번째 페이지는 잘 나왔지만 2페이지 3페이지~마지막 페이지까지의 값을 갖고 싶다.

여기서 다음 순번의 로또 배출점을 구하려 한다.

 

페이지를 넘기는 형태를 보니 selfSubmit이라는 onclick을 통해 페이지가 넘어가고 있었다. 

 

사전에 이거 먼저 깔아주셔야 됩니다.

 

cmd 창을 통해 셀레니움을 깐 폴더로 이동해서 아래의 명령어를 입력해준다.

java -Dwebdriver.gecko.driver="geckodriver.exe" -jar selenium-server-standalone-3.11.0.jar -port 4445

 

 

이제 R에서 셀레니움을 install을 해준다.

셀레니움은 동적 웹페이지 크롤링을 가능케 하는 함수이다. 동적이라는 건 어떠한 동작을 하면서 크롤링하는 작업을 말한다.

 

아래 작업은 페이지의 마지막 값을 알기 위해 사용하였다.

 

 

이 가져온 값을 전처리를 통해 숫자의 값만 가져온다.

 

 

remoteDriver를 세팅해준다. 

remoteDriver 클래스는 JsonWireProtocol을 사용하여 Selenium 서버와 통신하게 끔하다.

open을 할경우 아래와 같이 창이 뜬다. 저렇게 자동화된 테스트 소프트웨어~ 라고 써있다.

 

그 다음 url을 넣어서 navigate를 넣어주면 해당 url로 이동한다.

 

 

 

크롤링하는 소스이다.

 

 

이 selfSubmit에 따라 자바스크립트가 실행되면 페이지가 1->198까지 순차적으로 이동한다.

 

위에 for문을 돌리게 되면 페이지가 자동으로 넘어가고 넘어가는 페이지를 lottoStore에 저장한다.

값을 출력해 보면 위같은 형식으로 나온다.

 

내가 가져온 값은 

이 부분에 해당하는 값을 전부 가져왔다.

 

그다음 가져온 값을 전처리하는 작업을 거친다.

 

 

전처리 후 결과이다.

 

 

마지막 만든 데이터 프레임을 csv파일로 생성한다.

 

csv 파일을 읽으면 아래와 같이 나온다. 

 

 

반응형