🥨 웹 크롤링
데이터를 가져온다, 긁어온다
웹 페이지의 내용을 JAVA로 끌어와서 (스크랩핑) ->
정보를 가공 -> 가공한 정보를 샘플데이터로 사용 (크롤링)
1) 라이브러리 사용법
2) 웹 >> 웹 페이지
HTML : 웹 페이지를 어떻게 구성할지 구조를 보여주 태그
3) "데이터 가공"
웹 크롤링을 하기 위해서는 Jsoup이라는 라이브러리가 필요하다
라이브러리는 자바에서 기본으로 제공하지 않는다
https://jsoup.org/download 에서 다운받고 workspace와 같은 곳에 위치해있는
resource파일에 넣어뒀다

< Jsoup 라이브러리 추가 >



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 |