🍏 개발일기

웹 크롤링 | 라이브러리 JAVA에 다운로드하기 | 선택자

보배 진 2025. 10. 29. 10:27

 

 

 

 

 

 

🥨 웹 크롤링

데이터를 가져온다, 긁어온다

 

웹 페이지의 내용을 JAVA로 끌어와서 (스크랩핑) ->

정보를 가공 -> 가공한 정보를 샘플데이터로 사용 (크롤링)

 

 

 

1) 라이브러리 사용법

2)     웹 >> 웹 페이지

HTML :  웹 페이지를 어떻게 구성할지 구조를 보여주 태그

 

3) "데이터 가공"

 

 

 

 

 

 

 

 

웹 크롤링을 하기 위해서는 Jsoup이라는 라이브러리가 필요하다

라이브러리는 자바에서 기본으로 제공하지 않는다

https://jsoup.org/download 에서 다운받고 workspace와 같은 곳에 위치해있는

resource파일에 넣어뒀다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

< Jsoup 라이브러리 추가 >

프로젝트 우클릭 > Properties
JavaBuildPath > Libraries > .jar

 

Apply

 

 

 

 

Test01.java 전체 코드

package class01;

import java.io.IOException;

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 Test01 {
	public static void main(String[] args) {
		String url = "https://www.melon.com/"; // 크롤링 하려는 사이트의 url
		
		Connection conn = Jsoup.connect(url); 
		// Jsoup은 자바의 대표적인 웹크롤러
		// 자바와 웹을 연결
		
		Document doc = null;
		try {
			doc = conn.get(); // 웹 페이지 문서를 꺼내옴
		} catch (IOException e) {
			e.printStackTrace();
		}
		//System.out.println(doc);
		
		String title = doc.title();
		System.out.println(title);
		
		// span 태그
		Elements elems = doc.select("span"); 
		for(Element elem : elems) {
			System.out.println(elem);
		}
		for(Element elem : elems) {
			System.out.println(elem.text());
			// 태그 빼고 텍스트만
		}
		
		// a태그의 href 속성
		Element elems2 = doc.selectFirst("a[href]");
		for(Element elem : elems) {
			// System.out.println(elems2);
			// System.out.println(elems2.text());
			System.out.println(elems2.attr("href"));	
		}
		
		Elements elems3 = doc.select(".ellipsis");
		for(Element elem : elems3) {
			System.out.println(elem.text());
		}
	}
}

 

출력 결과

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

Test02.java 전체 코드

package class01;

import java.io.IOException;
import java.util.ArrayList;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Test02 {
	public static void main(String[] args) {
		ArrayList<Melon> datas = new ArrayList<>();
		
		String url = "https://www.melon.com/";
		try {
			Document doc = Jsoup.connect(url).get();
			
			int i=1;
			Elements elems = doc.select("a.ellipsis");
			for(Element elem : elems) {
				if(i>10) {
					break;
				}
				//System.out.println(i + ". " + elem.text());
				Melon data = new Melon();
				data.setTitle(elem.text());
				datas.add(data);
				i++;
			}
			System.out.println();
			i = 1;
			elems = doc.select("div.ellipsis > a.fc_mgray:first-child"); 
			//div안에 있는 자식 a.fc_mgray : 한명만 선택(=선택자)
			
			for(Element elem : elems) {
				if(i>10) {
					break;
				}
				//System.out.println(i + ". " + elem.text());
				datas.get(i-1).setName(elem.text());
				i++;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		for(Melon data:datas) {
			System.out.println(data);
		}
	}
}

 

내가 멜론 사이트에서 제목과 가수를 출력했다

ArrayList<Melon> datas = new ArrayList<>();

에 넣어 쉽게 출력할 수 있도록 하였다

 

 

 

 

 

 

elems = doc.select("div.ellipsis > a.fc_mgray:first-child");

가수를 출력하려고 한다

div 클래스 ellipsis의 자식 a.fc_mgray에 가수 한명만 출력하고자 한다

first-child 가 없을 때는 가수 전부가 출력되어 제목과 매칭이 안되는 경우가 생기기 때문에

이것이 바로 선택자이다

 

 

 

 

 

 

 

 

마침표와 샵

. -> id

# -> class

 

 

 

 

Melon 클래스 전체 코드

package class01;
public class Melon {
	private String title;
	private String name;
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Melon [title=" + title + ", name=" + name + "]";
	}	
}

 

 

 

'🍏 개발일기' 카테고리의 다른 글

결제 API에 대하여  (0) 2025.11.28
[오답노트] 숫자 나누기  (0) 2025.10.30
MVC연습하기 - 7. 종족으로 주민검색  (0) 2025.10.28
MVC연습하기 - 5. 삭제  (0) 2025.10.28
interface 이해하기 (with 추상클래스)  (0) 2025.10.26