크롤링4
업체 크롤링을 진행하기 위해 해당 페이지 코드를 확인해보니, javascript에 정보가 다 기록되어 있었다.
javascript 변수에 들어 있는 내용을 이용하여 scraping 할 수 있으면 더욱 간편하다고 생각되어 시도를 해보았다.
가장 중요한 것은 작업자 PC에 chorme이 설치되어있어야 한다는 것이다.
아래 링크에서 힌트를 얻어 설치했다. -_- (1시간 삽풨어요. 전 쓰레기예요)
사내 chrome 사용 도중에 이슈가 있어서 chrome canary 버전을 이용하고 있었는데. 그것 때문에 에러가 계속 발생하고 있었다.
우선 selenium 셋팅 부터 알아보자.
나는 chrome web driver를 선택했다.
// <https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java>
compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.141.59'
// <https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver>
compile group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '3.141.59'
document 링크는 아래
https://www.seleniumhq.org/docs/
도입하게 된 계기.
makeshop의 상품 정보를 스크래핑 하는 도중에 소스보기에서 javascript 전역 변수에 값들이 있는 것을 확인하였다.
jsoup은 html만 파싱하고 다룰 수 있었는데 selenium은 javascript도 실행이 가능하다고 하더라..
(그럼 써야지 -_-)

상품 정보가 보인다.
상품 정보가 전역변수에 보인다.

메타테그에는 이미지 링크가 보인다.
이것을 합치면 상품 정보를 가져올 수 있다.
ChromeOptions options = new ChromeOptions();
options.addArguments("headless");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get(event.getLink());
JavascriptExecutor executor = (JavascriptExecutor) webDriver;
String productName = executor.executeScript("return product_name").toString();
String expireCheck = executor.executeScript(
"var t = []; var wonderOptions = optionJsonData.basic[0]; for (var prop in wonderOptions) {t.push(wonderOptions[prop]['sto_state'])}; return t.every(function(state){return state == 'SOLDOUT'});")
.toString();
String productPrice = executor.executeScript("return product_price").toString();
String imageLink = executor.executeScript("return $(\"meta[property='og:image']\").attr('content')").toString();
String link = event.getLink();
// 품절 체크
if (Boolean.valueOf(expireCheck)) {
log.info("품절 입니당~ {}", link);
return;
}
위와 같이 코드를 작성하면 상품명, 가격, 품절 정보, 이미지 링크 데이터를 추출할 수 있다.
난 SSG를 탈락했다는 메일을 받았다.
쓰레기다.
공통영역이 없어서 포기한다.
-_ㅠ
This article is licensed under CC BY 4.0 by the author.