<TIL> 80. selenium, jsoup 크롤링

YUJIN LEE·2023년 3월 29일
0

트러블슈팅

목록 보기
1/3

크롤링(crawling)

Web상에 존재하는 Contents를 수집하는 작업(프로그래밍으로 자동화)

  1. HTML 페이지를 가져와, HTML/CSS 파싱, 필요한 데이터 추출
  2. Open API(Rest API)를 제공하는 서비스에 Open API를 호출해서 받은 데이터 중 필요한 데이터만 추출하는 기법
  3. Selenium등 브라우저를 프로그래밍으로 조작해 필요한 데이터만 추출하는 기법

Jsoup 크롤링

 Elements brandname = doc.getElementsByAttributeValue("class","today-deal-item__header__brand");
    Elements title = doc.getElementsByAttributeValue("class","today-deal-item__header__name");
    
    
 List<Map<String, String>> result = new ArrayList<>();
    for (int i = 0; i < title.size(); i++) {
      Element brandnames = brandname.get(i);
      Element titles = title.get(i);
      Element discountrates = discountrate.get(i);
      Element prices = contentsPrice.get(i);
      String imgUrl = img.get(i).attr("src");

      String brandnames1 = brandnames.text();
      String title1 = titles.text();
      String discountrates1 = discountrates.text();
      String price = prices.text();

jsoup 크롤링은 간편했다.
그냥 이런식으로 구현하면 바로 나왔다.
이미지 구현할때는 조금 해맸는데,
attr이라는 키워드를 써야지 src에 담긴 값이 나오는걸 뒤늦게 깨달았다..

selenium 크롤링

 // 크롬 드라이버 사용
    final String WEB_DRIVER_ID = "webdriver.chrome.driver";
    // 경로
    final String WEB_DRIVER_PATH = "C:/Users/유진/Desktop/chromedriver_win32/chromedriver.exe";

  // 크롬 옵션 설정
    ChromeOptions options = new ChromeOptions();
    options.setPageLoadStrategy(PageLoadStrategy.NONE);
    options.addArguments("--remote-allow-origins=*");
    // URL 설정
    String url = "https://ohou.se/store?affect_type=Home&affect_id=0";

    // 크롬 드라이버 객체 생성
    WebDriver driver = new ChromeDriver(options);
    driver.get(url);
    // 브라우저가 완전히 로딩될 때 까지 시간 기다림
    Thread.sleep(4000);
 String price = product.findElement(By.className("production-item-price__price")).getText();
      String img = product.findElement(By.className("image")).getAttribute("src");

 Map<String, String> item = new HashMap<>();
      item.put("브랜드 이름", brandname);
      item.put("상품명", title);
      item.put("할인율", discountrate);
      

이런식으로 코드를 구성했는데
selenium을 아예 맨땅에 헤딩하는 식으로 구현하느라
너무 힘들었다..
이것도 이미지 파일은 마찬가지로, getAttribute를 사용해서 src값을 가져왔어야 했는데,
내가 아직 이런 쪽에서는 부족해서 많이 헤맸다.

나중에 테스트 코드도 한번 써먹어야지..

? 셀레니움 짠 코드는 그리고 중간에 꺼져버린다
아무래도 오늘의 집이 동적 페이지고 무한한 소스탓에 서버에 부하가 찾아와서 그런 것 같기도하고..
일단 크롤링 성공했으면 된거지!!

첫 크롤링 시도.. 너무 힘들었지만 그래도 완성하니 뿌듯했다 ^0^
DB에 값 저장할때도 해맸지만,
query를 써서 데이터를 저장했다.. ㅎㅎ
query와 map 생각보다 많이 쓰니까 더 공부해두자!

profile
인정받는 개발자가 되고싶습니다.

0개의 댓글