[자바] 자바로 웹 크롤링 하기

한지연·2023년 5월 6일
0

🔍 JSOUP을 이용하여 크롤링 하기

❗️ spring boot를 이용하여 코드를 작성하였습니다.

1️⃣ build.gradle에 의존성 추가

dependencies {
	implementation 'org.jsoup:jsoup:1.15.3'
}

2️⃣ 크롤링하기


import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;


public class ArticleCrawler{
        private static String title = "";
        private static String contents = "";
        private static LocalDateTime date;

    public static Article workCrawler(String url) throws DateTimeParseException {

        Document doc;

        // div class ="time_area" : 작성일
        // h2 class ="news_ttl" : 제목
        // div class = "news_cnt_detail_wrap": 내용
        try {
            doc = Jsoup.connect(url).get();

            date = LocalDateTime.parse(
                    doc.
                            selectFirst(".registration").
                            text().
                            replace("입력 : ", ""),
                    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
            );

            // 기사 title
            title = doc.getElementsByTag("title").text();

            // 기사내용
            contents = doc.getElementsByClass("news_cnt_detail_wrap").text();
            
            System.out.println(
            "title: " + title + "\n" +
            "date: " + date + "\n" +
            "contents: " + contents);

        }catch (Exception e){
            e.printStackTrace();
        }

        return new Article(title, contents, date);
    }

}

📝 설명

  • 크롤링할 웹 페이지 주소를 매개변수로 받는 static 함수로 작성
public static Article workCrawler(String url)
  • html connection 가져오기
doc = Jsoup.connect(url).get();
  • 필요한 정보 가져오기
date = doc.selectFirst(".registration").text();
 
title = doc.getElementsByTag("title").text();
 
contents = doc.getElementsByClass("news_cnt_detail_wrap").text();

selectFirst(): 같은 이름으로 작성된 태그들 중 첫 번째 요소 가져오기
text(): text만 가져오기
getElementsByTag() : id값으로 값 가져오기
getElementsByClass(): class 이름으로 값 가져오기

나는 기사 내용을 간단하게 가져오는 클래스를 작성했다. 더 깊게 공부하거나 본인이 크롤링하려는 의도대로 코드를 작성하려면 공식 문서를 참고하여 알맞은 메소드들을 찾아서 활용하면 된다.

공식 문서
https://jsoup.org/cookbook/introduction/parsing-a-document

profile
배우고 활용하는 것을 즐기는 개발자, 한지연입니다!

0개의 댓글