반응형
웹 크롤링이란?
웹 크롤링은 웹 사이트에서 정보를 수집하고 추출하는 자동화된 프로세스를 의미합니다.
웹 크롤링은 일반적으로 웹 사이트의 robots.txt 파일을 준수하고, 무분별한 크롤링이나 스크래핑이 웹 서버에 부하를 일으키지 않도록 주의해야 합니다. 또한, 웹 사이트의 이용 약관을 준수해야 하며, 합법적인 목적으로만 사용해야 합니다. 크롤링을 할 때는 데이터 소유자의 권리를 존중하고 윤리적인 사용을 지키는 것이 중요합니다.
Jsoup
Jsoup은 HTML 파싱 및 조작을 위한 자바 라이브러리로, 웹 크롤링 작업에서 많이 사용됩니다. Jsoup을 통해 HTML 문서에서 원하는 정보를 추출할 수 있습니다.
Jsoup 라이브러리 추가
dependencies {
implementation 'org.jsoup:jsoup:1.14.3' // 최신 버전 확인 후 사용
}
문법
웹 페이지에서 HTML 가져오기
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
public class WebCrawler {
public static void main(String[] args) {
try {
// 웹 페이지에서 HTML 문서 가져오기
String url = "https://example.com";
Document document = Jsoup.connect(url).get();
// document를 이용하여 원하는 작업 수행 ...
} catch (IOException e) {
e.printStackTrace();
}
}
}
CSS Selector를 사용하여 요소 선택
// 웹 페이지에서 모든 링크 추출
Elements links = document.select("a[href]");
for (Element link : links) {
System.out.println("Link: " + link.attr("href"));
}
요소의 텍스트 가져오기
// 웹 페이지에서 제목 추출
Element titleElement = document.select("title").first();
String title = titleElement.text();
System.out.println("Title: " + title);
특정 속성 값 가져오기
// 이미지 태그의 src 속성 값 추출
Elements images = document.select("img");
for (Element image : images) {
String src = image.attr("src");
System.out.println("Image Source: " + src);
}
특정 클래스를 가진 요소 선택하기
// 클래스가 "exampleClass"인 모든 div 요소 선택
Elements divs = document.select("div.exampleClass");
for (Element div : divs) {
System.out.println("Div Content: " + div.text());
}
부모 및 자식 요소 선택하기
// 특정 div의 직계 자식으로 있는 p 태그 선택
Element specificDiv = document.select("div#specificDivId").first();
Elements paragraphs = specificDiv.select("> p");
for (Element paragraph : paragraphs) {
System.out.println("Paragraph: " + paragraph.text());
}
HTML 소스코드 문자열로 가져오기
// HTML 소스코드 문자열로 가져오기
String htmlSource = document.html();
System.out.println("HTML Source: " + htmlSource);
여러 페이지 크롤링 가능
// 여러 페이지 크롤링 예제
for (int i = 1; i <= 3; i++) {
String pageUrl = "https://example.com/page" + i;
Document pageDocument = Jsoup.connect(pageUrl).get();
//...
}
반응형
'Spring Boot' 카테고리의 다른 글
Spring Boot 캐시 Cache 구현하기 (spring-context-support? redis?) (0) | 2024.02.05 |
---|---|
Spring Boot Custom Validation 어노테이션 만들기 (0) | 2023.12.13 |
Spring Boot Validation @NotNull, @NotEmpty, @NotBlank 차이점 (0) | 2023.10.24 |
SpringBoot에서 JUnit5로 효율적인 단위 테스트 작성하기, Assertions로 값 검증하기 (0) | 2023.10.04 |
SpringBoot에서 MockMvc을 활용한 컨트롤러, HTTP 요청 테스트 방법 (0) | 2023.10.04 |