크롤링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.