코딩항해기

[API] JAVA - 정적 크롤링 (jsoup API / Eclipse) 본문

기타/API

[API] JAVA - 정적 크롤링 (jsoup API / Eclipse)

miniBcake 2024. 7. 30. 15:42

 

크롤링

스크래핑 웹페이지, 또는 웹사이트에서 데이터를 수집한다.
크롤링 수집한 데이터를 가공한다.
(스크래핑과 세트이므로 스크래핑을 포함해서 이야기하는 경우가 많다.)
웹 크롤링 크롤링을 웹에서 하는 것을 말다.

 

즉, 크롤링은 데이터를 수집하고 분석하여, 분류, 색인하여 저장하는 것을 의미한다.

 

 

크롤링의 종류

종류 설명 API
정적 크롤링 웹 페이지에만 접근한다.
(페이지에 직접 작성된 데이터만 접근 가능한다.)
⁜페이지 소스 코드 보기로만 보이는 데이터만 가져오는 것이다.
jsoup 등
동적 크롤링 웹 페이지가 참조하는 데이터까지 접근 가능하다.
⁜서버의 데이터를 암호화했다면 접근 불가능하다.
셀레니움 등

 

 

이번 크롤링 정리는 정적 크롤링 중에서 jsoup API를 eclipse로 활용하는 방법을 정리할 예정이다.

 

jsoup API로 크롤링하기

  1. 크롤링할 대상 url 가져와 연결하기 (Connection)
  2. 페이지 정보 받아오기 (Document)
  3. cssSelector로 요소들 가져오기 (Elements)
  4. 요소들에서 요소를 추출하기 (Element)
  5. 추출한 요소(데이터)를 정제하기 
package ctrl;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
import model.ProductDTO;

//jsoup API를 사용할 때 나오는 타입은 jsoup API안에 있는 타입으로 import해야한다.
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


public class Crawling {
	public static ArrayList<ProductDTO> makeSample() { 
    //별도의 객체 생성없이 호출하기 위한 static 선언
		ArrayList<ProductDTO> datas=new ArrayList<ProductDTO>();

		String url="크롤링할 사이트 주소";
        String priceSelector = "strong.item_price > span";
        String nameSelector = "strong.item_name";        
		Connection conn=Jsoup.connect(url);
        Document doc=null;
		try {
			doc=conn.get();
		} catch (IOException e) {
			System.err.println("doc 확보 실패 ...");
		}

		// 가공(정제) 작업 Elements마다 개별로 진행한다.
		Elements elems = doc.select(nameSelector);
		for(Element elem:elems) {
			ProductDTO data=new ProductDTO(); // DTO 객체 생성
			data.setName(elem.text());
			datas.add(data); // 배열리스트에 생성한 DTO 객체 추가
		}

		Elements elems02 = doc.select(priceSelector);
		int i=0;
		for(Element elem:elems02) {
			String str=elem.text().replaceAll("[^\\d]", ""); //숫자를 제외하고 삭제
			int price=Integer.parseInt(str);
			datas.get(i++).setPrice(price); // 배열리스트에 추가한 DTO 객체의 setter 호출
		}

		Random rand=new Random();
		for(i=0;i<datas.size();i++) { //샘플데이터 재고 랜덤지정
			datas.get(i).setCnt(rand.nextInt(6));
		}
		
		return datas; //크롤링한 결과값 반환
	}
}

 

 

주의사항

jsoup API을 사용할 때는 외부 API이므로, Eclipse javaProject,

또는 대상 java파일에 jsoup.jar파일을 build path해주어야한다.

 

Eclipse에서 Build Path로 외부 API넣기

더보기

1. build path할 대상 우클릭하기

 

2. build path 선택(마우스 오버)하여 confiqure build path... 들어가기

 

3. build path에서 libraries 선택 후 classpath 클릭, AddExternal JARs ... 를 클릭한다.

 

4. 다운로드 받은 jsoup.jar파일을 찾아 선택하여 열어준다.

jsoup API 다운로드 사이트 : https://jsoup.org/download

 

5. jsoup.jar 파일이 잘 불러와졌는지 확인 한 후 Order and Export를 클릭한다.

 

6. 불러온 jar파일을 체크하고 Apply  >  Apply and Close를 순서대로 진행한다.

 

7. 새롭게 생긴 Referenced Libraries에서 jar파일을 확인할 수 있다.

 

(번외) jar파일을 제거하고 싶을 때에는 buildpath libraries에서 remove 한 뒤 Apply해주면 된다.