Spring Boot error log (3) (crawling Selenium)

­김찬호·2021년 10월 5일
6
post-thumbnail

Selenium을 이용하여 크롤링 하기

이번 토이 프로젝트에서는 중고거래 플랫폼을 크롤링 하는 것이 핵심 기능 중 하나이다. JS에서는 document에 직접 접근할 수 있어 훨씬 간단하고 속도도 빠르다. 하지만 이번에는
spring-boot를 사용하게 되면서 어쩔 수 없이 selenium을 이용하였다.

1. 조건에 맞는 요소 가져오기

나는 당근마켓의 상품 검색결과를 최대한 많이 가져와야 한다.

사진을 보면 알 수 있듯이 검색결과는 6개씩만 출력된다. 하지만 나는 최대한 많은 게시글을 가져와야 하기 때문에 selenium을 활용하여 <더보기> 버튼을 마구 눌러준다.
driver 변수는 selenium에 web driver설정 파일이다..
classname은 예시를 쓰겠다.

moreBtn = driver.findElement(By.className("더보기"));
for(int count = 0 ; count < 50; count++){
	moreBtn.click();
}

그 후 게시글들의 요소를 가져온다.

articlePrice = driver.findElements(By.className("가격"));

이 때 문제가 생긴다. 더보기 버튼을 50번 클릭하는 이벤트는 시간이 굉장히 오래 걸린다. 때문에 이렇게 코드를 구성하면 더보기가 50번 클릭되어 브라우저에 출력하기 전에 "가격"클래스를 갖고오게 된다.

2. 브라우저를 기다려 주기

우리 아가 크롬은 우리가 원하는 속도에 맞춰줄 수 없다. 그래서 인내심 많은 우리가 기다려줘야 한다.

moreBtn = driver.findElement(By.className("더보기"));
for(int count = 0 ; count < 50; count++){
	moreBtn.click();
}
Thread.sleep(10000);

10초동안 코드를 중지시켜 브라우저에 게시글들이 출력되는 것을 기다려주고 그 후 "가격"클래스에 접근하면 어느정도 해결되는 것을 볼 수 있다.
각자의 개발 환경에 따라 10초가 적을 수도 있고 투머치일 수도 있다. 그건 환경에 맞춰 설정하면 될 것 같다.

3. 배운점

웹개발을 할 때는 브라우저를 잘 이해하여 서로 얼굴 붉히는 일 없도록 하는 것이 중요하다는 것을 깨달았다.
또 당근마켓은 더보기 버튼을 계속 누르다보면 나왔던 글이 또 나오는 기이한 현상을 알 수 있었다.

profile
주니어 개발자가 되고싶은 학부생

1개의 댓글

comment-user-thumbnail
2021년 10월 11일

10초..인내심 많은 제가 기다리겠습니다.

답글 달기