반응형

# 자바 크롤링

## 준비물

  • Jsoup : 자바로 만들어진 HTML parser로 DOM 구조를 추적하거나 CSS 선택자를 이용, 데이터를 찾아 추출할 수 있다.

## 라이브러리 추가

https://jsoup.org/download 접속하여 Jsoup jar파일을 모두 다운로드 후 프로젝트에 추가해 준다.

## 사용

  • ajax인 경우에는 해당방법으로 가져올 수 없음
public class CrawlingService {
	public void getCrawling() {
		// Jsoup를 이용해서 "사이트" 크롤링
		String url = "사이트 주소"; //크롤링할 url지정
		Document doc = null;	//Document에 페이지의 전체 소스가 저장된다
		
		try {
			doc = Jsoup.connect(url).get();
		} catch (IOException e) {
			e.printStackTrace();
		}
		//select를 이용 원하는 태그를 선택(select는 원하는 값을 가져오기 위한 중요한 기능이다.)
		Elements element = doc.select(".covid19_datagroup");  
			
		element.select("em"); 

		String str = element.text();
		
		System.out.println("확인 : " + str); 

		System.out.println("============================================================");

		//Iterator을 사용 하나씩 값을 가져오기
		Iterator<Element> ie1 = element.select("strong.rank").iterator();
		Iterator<Element> ie2 = element.select("strong.title").iterator();
		        
		while (ie1.hasNext()) {
			System.out.println(ie1.next().text()+"\t"+ie2.next().text());
		}
		
		System.out.println("============================================================");
	}
}
  • 아래의 경우 ajax 크롤링 가능
String url = "https://www.sejong.go.kr/prog/fluInfo/listAjax.do";
		Document doc = null;
		try {
			doc = Jsoup.connect(url)
			        .header("origin", "https://www.sejong.go.kr/") // same-origin-polycy 로 인한 설정
			        .header("referer", "https://www.sejong.go.kr/") // same-origin-polycy 로 인한 설정
			        .ignoreContentType(true) // json 받아오려면 타입무시를 해야하는듯?
			        .get();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String json = doc.select("body").text();
반응형

+ Recent posts