Web Analytics

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java G마켓 베스트 크롤링 HtmlUnit 샘플
    개발 2026. 3. 5. 14:15

    목차

      Java G마켓 베스트셀러 크롤링 HtmlUnit 샘플
      Java G마켓 베스트셀러 크롤링 HtmlUnit 샘플



      G마켓 베스트 페이지는 동적 HTML이라서 Jsoup으로 긁어 올 수가 없습니다.
      대안으로 HtmlUnit을 이용해서 크롤링이 가능합니다.
      HtmlUnit은 자바스크립트로 동적으로 생성되는 콘텐츠를 긁어와야 할 때 사용합니다.
      URL에서 HTML을 가져오고 베스트 리스트 아이템들을 선택한 뒤 상품명과 가격과 링크  등을 출력합니다.

       

       


      HtmlUnit

      Jsoup이 단순히 HTML 문서를 정적으로 읽습니다
      HtmlUnit은 화면 없는 브라우저에 가깝습니다.
      내부적으로 JavaScript 엔진을 탑재하고 있어 웹 페이지 내의 스크립트를 실행합니다.

       

      https://www.htmlunit.org

       

      HtmlUnit – Welcome to HtmlUnit

      HtmlUnit 💗 Sponsoring 💗 Constantly updating and maintaining the HtmlUnit code base already takes a lot of time. I would like to make 2 major extensions in the next few months For doing this I need your Sponsoring. HtmlUnit is a "GUI-Less browser fo

      www.htmlunit.org

       

       

      특징
      JavaScript 지원 AJAX, jQuery 등 동적인 콘텐츠가 포함된 페이지를 렌더링할 수 있습니다.
      브라우저 시뮬레이션 Chrome , Firefox , Edge 등 특정 브라우저인 것처럼 헤더 정보를 설정하여 동작할 수 있습니다.
      비가시성 ( Headless ) 화면에 브라우저 창이 뜨지 않으므로 서버 환경에서 가볍고 빠르게 동작합니다.
      웹 자동화 로그인 프로세스 , 검색어 입력 , 페이지 이동 등의 복잡한 워크플로우를 자동화하기에 적합합니다.

       

      항목 Jsoup HtmlUnit
      성격 HTML 파서 ( Parser ) Headless 웹 브라우저
      JavaScript 실행 불가능 ( 정적 텍스트만 가능합니다. ) 가능 ( JS 엔진 내장 )
      속도 매우 빠릅니다. 상대적으로 느립니다.
      난이도 매우 쉬움 ( CSS 선택자 사용합니다. ) 보통 ( 브라우저 제어 로직 필요합니다. )
      용도 단순 정보 크롤링 웹 자동화 , 동적 페이지 스크래핑



      <!-- HtmlUnit -->
      <dependency>
          <groupId>org.htmlunit</groupId>
          <artifactId>htmlunit</artifactId>
          <version>4.21.0</version>
      </dependency>

       

      // HtmlUnit https://mvnrepository.com/artifact/org.htmlunit/htmlunit
      implementation("org.htmlunit:htmlunit:4.21.0")



      HtmlUnit
      HtmlUnit




      반응형

      G마켓 베스트

      1. htmlUnit으로 URL에 접속해서 HTML 문서를 가져옵니다.
      2. 베스트 상품들이 들어 있는 li 요소 목록 선택합니다.
      3. 각 상품 li 요소를 순회하면서 정보 추출합니다.

       

       

      import org.htmlunit.BrowserVersion;              // 브라우저 버전(Chrome, Firefox 등) 설정용
      import org.htmlunit.WebClient;                   // HtmlUnit 웹 클라이언트 (핵심 클래스)
      import org.htmlunit.html.DomElement;             // DOM 요소 타입 (HtmlElement의 상위 클래스)
      import org.htmlunit.html.DomNode;
      import org.htmlunit.html.DomNodeList;            // 노드 리스트 반환 타입
      import org.htmlunit.html.HtmlPage;               // 로드된 HTML 페이지 표현
      
      /**
       * G마켓 베스트 페이지 크롤링
       * HtmlUnit
       * @since 2026-03-05
       */
      public class GmarketBestHtmlUnit {
      
          /**
           * 해당 URL에서 HTML을 가져오고
           * 베스트셀러 리스트 아이템들을 선택한 뒤
           * 상품명, 가격, 링크, 이미지 URL을 출력
           * 
           */
          public static void main(String[] args) {
              // G마켓 베스트 페이지 URL
              String url = "https://www.gmarket.co.kr/n/best";
      
              // WebClient를 try-with-resources로 생성 ( 자동 close )
              try ( WebClient webClient = new WebClient(BrowserVersion.CHROME) ) {
                  // CSS/JS 비활성화 ( 성능 향상 및 오류 방지 )
                  webClient.getOptions().setCssEnabled(false);
                  webClient.getOptions().setJavaScriptEnabled(false);
      
                  // HTTPS 인증 문제 회피
                  webClient.getOptions().setUseInsecureSSL(true);
      
                  // 타임아웃 설정 (필요시)
                  webClient.getOptions().setTimeout(100000);
      
                  // 페이지 로드
                  HtmlPage page = webClient.getPage(url);
      
                  // 디버깅용 전체 HTML 출력 ( 필요시 주석 해제 )
                  // System.out.println(page.asXml());
      
                  // G마켓 베스트 상품 li 목록 선택 ( CSS selector )
                  DomNodeList<DomNode> items = page.querySelectorAll("ul.list__best > li");
      
                  System.out.println("상품 개수: " + items.size());
                  
                  // 순위 카운터 초기값 설정
                  int rank = 1;
      
                  // 각 상품 순회
                  for ( DomNode item : items ) {
                      // 5위까지만 출력 후 반복 종료 ( 테스트용 제한 )
                      if ( rank - 1 == 5 ) break;
                      
                      // 상품명
                      DomElement titleEl = item.querySelector(".box__item-title");
                      String name = titleEl != null ? titleEl.asNormalizedText() : "";
                      
                      // 원가
                      DomElement originalEl = item.querySelector(".box__price-original > .text__value");
                      String original = originalEl != null ? originalEl.asNormalizedText() : "";
      
                      // 가격
                      DomElement priceEl = item.querySelector(".box__price-seller > .text__value");
                      String price = priceEl != null ? priceEl.asNormalizedText() : "";
      
                      // 링크
                      DomElement linkEl = item.querySelector("a");
                      String link = linkEl != null ? linkEl.getAttribute("href") : "";
      
                      // 이미지
                      DomElement imgEl = item.querySelector("img");
                      String img = imgEl != null ? imgEl.getAttribute("src") : "";
      
                      // 결과 출력
                      System.out.printf("[%2d위] %n", rank);
                      System.out.printf("상품명 : %s%n", name);
                      System.out.printf("원가   : %s원%n", original);
                      System.out.printf("가격   : %s원%n", price);
                      System.out.printf("링크   : %s%n", link);
                      System.out.printf("이미지 : https:%s%n", img);
                      
                      // 상품 간 구분선 출력
                      System.out.println("-".repeat(60));
                      
                      // 다음 상품으로 순위 증가
                      rank++;
                  }
      
              } catch ( Exception e ) {
                  e.printStackTrace();
              }
          }
      }

       

       

      G마켓 베스트
      G마켓 베스트
      G마켓 베스트
      G마켓 베스트


      요약

      1. htmlunit implementation("org.htmlunit:htmlunit:4.21.0")
      2. G마켓 베스트 https://www.gmarket.co.kr/n/best
      3. 목록 ul.list__best > li
      4. 상품 .box__item-title
      5. 원가 .box__price-original > .text__value
      6. 가격 .box__price-seller > .text__value
      7. 링크 a.getAttribute("href")
      8. 이미지 img.getAttribute("src")

      반응형
    Designed by Tistory.