Sky Archive

Java

[JAVA] URL링크 공유 웹사이트 크롤링(Jsoup 라이브러리)

서울시장 2021. 10. 26. 11:34

사용자가 원하는 링크 공유 시 다음과 같이 해당 사이트의 썸네일이나 사이트명에 대해서 크롤링하는 방법이다.

 

Jsoup 은 실제 HTML 작업을 위한 Java 라이브러리입니다. HTML5 DOM 메서드와 CSS 선택기를 사용하여 URL을 가져오고 데이터를 추출하고 조작하기 위한 매우 편리한 API를 제공합니다.

 

  • URL, 파일 또는 문자열에서 HTML을 긁고 구문 분석 
  • DOM 순회 또는 CSS 선택기를 사용하여 데이터 찾기 및 추출
  • HTML 요소, 속성 및 텍스트 조작
  • XSS 공격 을 방지하기 위해 수신 허용 목록에 대해 사용자 제출 콘텐츠 정리
  • 깔끔한 HTML 출력

 

https://jsoup.org/download

 

그래들에 1.13.1버전으로 설정했다.

implementation 'org.jsoup:jsoup:1.13.1'

 

Document doc = null;
String url = request.getParameter("url"); // 적용할 사이트 url

try {
    doc = Jsoup.connect(java.net.URLDecoder.decode(url,"utf-8")).header("User-Agent" , "Mozilla/5.0").get();
} catch (IOException e) {
    log.error(e.getMessage(), e);
}

// 제목
String title = doc.select("meta[property=og:title]").attr("content");
// 내용
String description = doc.select("meta[property=og:description]").attr("content");
// 이미지
String image = doc.select("meta[property=og:image]").attr("content");

 

Jsoup 라이브러리로 해당 웹사이트의 데이터를 추출한 부분을 디버깅해보니 아래와 같은 데이터를 추출할 수 있다.

<!doctype html>
<html lang="ko" data-dark="false"> 
 <head> 
  <meta charset="utf-8"> 
  <title>NAVER</title> 
  <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
  <meta name="viewport" content="width=1190"> 
  <meta name="apple-mobile-web-app-title" content="NAVER"> 
  <meta name="robots" content="index,nofollow"> 
  <meta name="description" content="네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요"> 
  <meta property="og:title" content="네이버"> 
  <meta property="og:url" content="https://www.naver.com/"> 
  <meta property="og:image" content="https://s.pstatic.net/static/www/mobile/edit/2016/0705/mobile_212852414260.png"> 
  <meta property="og:description" content="네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요">

...

 

Jsoup 라이브러리를 이용하여 원하는 사이트의 썸네일이나 사이트명 같은 데이터를 쉽게 크롤링할 수 있다.