Post
KO

크롤링4

업체 크롤링을 진행하기 위해 해당 페이지 코드를 확인해보니, javascript에 정보가 다 기록되어 있었다.

javascript 변수에 들어 있는 내용을 이용하여 scraping 할 수 있으면 더욱 간편하다고 생각되어 시도를 해보았다.

가장 중요한 것은 작업자 PC에 chorme이 설치되어있어야 한다는 것이다.

아래 링크에서 힌트를 얻어 설치했다. -_- (1시간 삽풨어요. 전 쓰레기예요)

https://stackoverflow.com/questions/50138615/cannot-find-chrome-binary-with-selenium-in-python-for-older-versions-of-google-c

사내 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도 실행이 가능하다고 하더라..

(그럼 써야지 -_-)

![](/assets/images/posts/221454880966/11212c6c56e8.png?type=w580)

상품 정보가 보인다.

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

![](/assets/images/posts/221454880966/186cb534bfaa.png?type=w580)

메타테그에는 이미지 링크가 보인다.

이것을 합치면 상품 정보를 가져올 수 있다.

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.